Greitas apsaugininko pareiškimas (su pavyzdžiais)

Šiame straipsnyje jūs išmoksite naudoti apsaugą, kad valdytumėte programos vykdymo eigą.

„Swift If“ pareiškime aprašoma, kaip galite atlikti veiksmus pagal tam tikrą sąlygą (loginę reikšmę). Šiame straipsnyje mes išnagrinėsime sargybos pareiškimo pranašumus, jei teiginys valdys programos eigą ir parašys paprastesnį ir švaresnį kodą.

Greitas sargybos pareiškimas

Pagrindinis sargybos pareiškimas naudojamas tam tikromis sąlygomis perkelti programos valdymą iš taikymo srities. Šie teiginiai yra panašūs į „if“ sakinius, kurie vykdo teiginius pagal tam tikrą sąlygą (loginę vertę), tačiau, kitaip nei, apsauginiai teiginiai vykdomi tik tada, kai nesilaikoma tam tikrų sąlygų.

Be to, pareiškimai sargyboje turi būti išbraukti. Todėl mes turime naudoti programa kontrolės ataskaitų return, break, continuearba throwtuo sargybos pareiškimo pabaigoje.

Sargybos pareiškimo sintaksė

 sargybos išraiška kita (// teiginiuose // turi būti kontrolinis sakinys: grįžti, sulaužyti, tęsti arba mesti.) 
  • Čia išraiška yra loginė išraiška (grąžina arba truearba false).
  • Įvertinus išraišką false, guardvykdomi sakiniai, esantys kodo bloke .
  • Įvertinus išraišką true, kodo bloke esantys teiginiai guardnebus vykdomi.

Kaip veikia sargybos pareiškimas?

Pastaba: sargybos pareiškimą galas turi būti valdymo pareiškimą return, break, continuearba throw.

1 pavyzdys: Kaip veikia sargybos pareiškimas?

Paprastas galiojantis sargybos pareiškimas yra toks:

 guard true else ( print("Condition not met") ) print("Condition met") 

Kai paleisite programą, išvestis bus:

 Sąlyga įvykdyta

Pirmiau pateiktoje programoje „guard“ yra loginė reikšmė true (sąlyga įvykdyta). Kadangi sargybos pareiškimai vykdomi tik tada, kai sąlyga nėra įvykdyta, sakinys sargyboje nėra vykdomas. Štai kodėl ekrane print("Condition met")vykdoma ir įvykdoma išvesties sąlyga .

Dabar pakeiskime sąlygą į klaidingą kaip:

2 pavyzdys: sargybos pareiškimas turi būti pašalintas iš taikymo srities

 guard false else ( print("Condition not met") ) print("Condition met") 

Pirmiau pateiktoje programoje apsaugos būklė vertinama iki false. Taigi, teiginys, print("Condition not met")esantis kitur, turėtų būti įvykdytas. Bet gausite klaidą sakydami, kad „apsauginis“ kūnas gali nepatekti, apsvarstykite galimybę naudoti „grįžti“ arba „mesti“, kad išeitumėte iš srities.

Klaidos pranešimas paprastais žodis reiškia, jums reikia perkelti programos kontrolę iš sargybos pareiškimą naudojant return, break, continuear throwpareiškimus. Kol kas mes ketiname naudoti return. Kadangi returnteiginį galima naudoti tik funkcijos viduje, aukščiau esantį kodą apimsime „Swift Functions“.

3 pavyzdys: sargybos sakinys funkcijos viduje

Apsaugos sakinį galime naudoti funkcijoje „Swift“ kaip:

 func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call") 

Kai paleisite pirmiau nurodytą programą, išvestis bus:

 Sąlyga netenkinama Sveiki, po funkcijos iškvietimo 

Ankstesnėje programoje apsaugos būklė vertinama false, todėl apsaugos viduje esantys teiginiai vykdomi. Pirmasis sakinys print("Condition not met")išleidžia sąlygą konsolėje.

Pareiškimas returnnutraukia funkcijos vykdymą, o pareiškimas įvykdžius funkcijos iškvietimą , kuris konsole print("Hello, after function call")išleidžia „ Hello“ po funkcijos iškvietimo .

4 pavyzdys: apsauga su papildomais elementais

We have seen in Swift Optionals the use of if-let to unwrap an optional. However, we can also use guard statement in place of if-let for unwrapping an optional with one advantage. The main advantage of unwrapping an optional with guard instead of if-let is we can increase scope of the unwrapped variable.

Let's see this in example below:

 func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase() 

When you run the above program, the output will be:

 Name is nil. Cannot process

In the above program, you can see the unwrapped value temp is being used outside of the scope defined by guard statement. Since, name is defined optional and contains nil value, the guard statement fails to unwrap the value.

So, the statements inside guard else executes which prints Name is nil. Cannot process in the output and terminates the function with return statement. The equivalent code of the above guard statement if-else statement is:

 func changeOptionalStringToUpperCase() ( var name:String? if let temp = name ( print("Uppercased:(temp.uppercased())") ) else ( print("Name is nil. Cannot process") return ) //how to access temp here?? Solution:Use Guard ) changeOptionalStringToUpperCase() 

Notice above two statements are both valid and does the same job. But using if-let statement you cannot use the unwrapped value outside of if-let statement. But with guard statement you can use the unwrapped value through out the function.

Example 5: Guard with multiple conditions

Guard statements can also chain multiple conditions separated by comma (,) as:

 func changeOptionalStringToUpperCase() ( var name:String? = "" guard let temp = name , temp.count> 0 else ( print("Name is nil or an empty string. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()

When you run the above program, the output will be:

 Name is nil or an empty string. Cannot process

In the above program ,the guard statement contains two conditions separated by comma.

Pirmoji sąlyga let temp = nameišvynioja pasirinktinį, kuris grąžinamas truemūsų atveju, o antroji sąlyga temp.count> 0patikrina, ar neišvyniota eilutė turi daugiau nei 0 simbolių, kuriuos įvertina falsemūsų pavyzdys.

Todėl sakinys, esantis sargybos sakinyje, vykdo sakinį, print("Name is nil or an empty string. Cannot process")kurio išvestis yra Nulis arba tuščia eilutė. Negalima apdoroti konsolėje ir nutraukti funkciją su returnsakiniu.

Įdomios straipsniai...