I den här artikeln lär du dig att använda skyddsutlåtande för att styra flödet av ditt programs körning.
Swift If Statement beskriver hur du kan utföra åtgärder baserat på vissa villkor (booleskt värde). I den här artikeln kommer vi att undersöka fördelarna med vaktuttalande om if uttalande för att styra programflödet och skriva mer enklare och renare kod.
Snabbt vaktuttalande
Huvudanvändningen av vaktuttalande är att överföra programkontrollen utanför ett omfång på vissa villkor. Dessa påståenden liknar om uttalanden som utför uttalanden baserade på vissa villkor (booleskt värde), men till skillnad från om, gäller vaktuttalanden endast när vissa villkor inte är uppfyllda.
Dessutom måste uttalanden inuti vakten komma från räckvidden. Därför måste vi användarprogram kontroll uttalanden return
, break
, continue
eller throw
i slutet av vakten uttalande.
Syntax för Guard Statement
vaktuttryck annat (// uttalanden // måste innehålla ett kontrolluttal: returnera, bryta, fortsätt eller kasta.)
- Här är uttryck ett booleskt uttryck (returnerar antingen
true
ellerfalse
). - Om uttrycket utvärderas till utförs
false
uttalanden i kodblocketguard
. - Om uttrycket utvärderas till hoppas
true
uttalanden inuti kodblocketguard
från körning.
Hur vaktförklaring fungerar?
Obs: I slutet av vakten uttalande måste innehålla en kontroll uttalande return
, break
, continue
eller throw
.
Exempel 1: Hur vaktförklaring fungerar?
Ett enkelt giltigt vaktuttalande är nedan:
guard true else ( print("Condition not met") ) print("Condition met")
När du kör programmet blir resultatet:
Villkor uppfyllt
I ovanstående program innehåller vakt ett booleskt värde sant (villkoret är uppfyllt). Eftersom skyddsuttalanden endast körs när villkoret inte är uppfyllt, utförs inte uttalandet i vakten. Det är därför som print("Condition met")
körs och utgångar skick uppfylls på skärmen.
Låt oss nu ändra villkoret till falskt som:
Exempel 2: vaktuttalande måste lämna räckvidden
guard false else ( print("Condition not met") ) print("Condition met")
I ovanstående program utvärderas skyddsvillkoret till false
. Så, uttalandet print("Condition not met")
inuti annars ska köras. Men du får ett felmeddelande som säger att "vakt" -kropp kanske inte faller igenom, överväg att använda ett "retur" eller "kasta" för att lämna räckvidden.
Felmeddelandet i enkla ord medel måste du överföra programkontroll från vakten uttalande hjälp return
, break
, continue
eller throw
uttalanden. För nu ska vi använda return
. Och eftersom return
uttalande endast kan användas i en funktion, kommer vi att slå in ovanför koden i Swift Functions.
Exempel 3: skyddsuttalande inuti en funktion
Vi kan använda skyddsuttrycket inuti i en funktion i Swift som:
func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call")
När du kör programmet ovan kommer utmatningen att vara:
Villkoret inte uppfyllt Hej efter funktionsanrop
I ovanstående program utvärderas vaktförhållandet till false
, därför utförs uttalandena inuti vaken. Det första uttalandet print("Condition not met")
matar ut villkoret inte uppfylls i konsolen.
Och uttalandet return
avslutar exekveringen av en funktion och uttalandet print("Hello, after function call")
efter att funktionsanropet körs vilket matar ut Hello after function call i konsolen.
Exempel 4: Skydd med tillval
Vi har sett i Swift Optionals användningen av if-let
att packa upp ett valfritt. Vi kan dock också använda if-let
vaktbeskrivning istället för att packa upp en valfri med en fördel. Den största fördelen med att packa upp ett tillval med skydd istället för if-let
är att vi kan öka omfattningen av den icke-inpackade variabeln.
Låt oss se detta i exemplet nedan:
func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
När du kör programmet ovan kommer utmatningen att vara:
Namnet är inget. Kan inte bearbeta
I ovanstående program kan du se att det oinpackade värdetemp används utanför det omfång som definieras av vaktuttalande. Eftersom namnet definieras som valfritt och innehåller inget värde går det inte att packa upp värdet.
Så utförs uttalandena i vakt som skriver ut Namn är noll. Kan inte bearbeta i utgången och avslutar funktionen med return
uttalande. Motsvarande kod för ovanstående skyddsuttalande om-annars uttalande är
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()
Observera ovan två uttalanden är båda giltiga och gör samma jobb. Men med hjälp av if-let-uttalande kan du inte använda det oinpackade värdet utanför if-let-uttalandet. Men med skyddsuttalande kan du använda det oinpackade värdet genom funktionen.
Exempel 5: Vakt med flera förhållanden
Skyddsuttalanden kan också kedja flera villkor åtskilda av kommatecken (,) som:
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()
När du kör programmet ovan kommer utmatningen att vara:
Namnet är inget eller en tom sträng. Kan inte bearbeta
I ovanstående program innehåller skyddsuttalandet två villkor åtskilda av kommatecken.
Det första villkoret let temp = name
packar upp ett valfritt som återkommer true
i vårt fall och det andra villkoret temp.count> 0
kontrollerar om den oöppnade strängen har mer än 0 tecken som utvärderas false
i vårt exempel.
Därför kör uttalandet inuti skyddsuttalandet uttalande print("Name is nil or an empty string. Cannot process")
som matar ut namnet är noll eller en tom sträng. Kan inte bearbeta i konsolen och avslutar funktionen med return
uttalande.