In dit artikel leert u de bewakingsverklaring te gebruiken om de stroom van de uitvoering van uw programma te controleren.
Swift If Statement beschrijft hoe u acties kunt uitvoeren op basis van een bepaalde conditie (booleaanse waarde). In dit artikel zullen we de voordelen van guard-statement onderzoeken ten opzichte van if-statement om de programmastroom te besturen en eenvoudiger en schoonere code te schrijven.
Swift Guard-verklaring
Het belangrijkste gebruik van guard statement is om onder bepaalde voorwaarden programmabesturing uit een scope te halen. Deze statements zijn vergelijkbaar met if statements die statements uitvoeren op basis van een bepaalde voorwaarde (booleaanse waarde), maar in tegenstelling tot if, worden de guard statements alleen uitgevoerd als niet aan bepaalde voorwaarden wordt voldaan.
Bovendien moeten uitspraken binnen de bewaker uit de scope worden gehaald. Daarom moeten we gebruikersprogramma control statements return
, break
, continue
of throw
aan het eind van de wacht statement.
Syntaxis van Guard Statement
guard expression else (// statements // moet een control statement bevatten: return, break, continue of throw.)
- Hier is uitdrukking een booleaanse uitdrukking (retourneert
true
offalse
). - Als de uitdrukking wordt geëvalueerd naar
false
, worden instructies in het codeblok vanguard
uitgevoerd. - Als de uitdrukking wordt geëvalueerd naar
true
, worden instructies in het codeblok vanguard
overgeslagen voor uitvoering.
Hoe Guard Statement werkt?
Opmerking: Het einde van de wacht verklaring moet een control statement bevatten return
, break
, continue
of throw
.
Voorbeeld 1: Hoe werkt bewakingsverklaring?
Een eenvoudige geldige bewakingsverklaring is als volgt:
guard true else ( print("Condition not met") ) print("Condition met")
Wanneer u het programma uitvoert, is de uitvoer:
Aan voorwaarde voldaan
In het bovenstaande programma bevat guard een booleaanse waarde true (aan voorwaarde is voldaan). Aangezien bewakingsverklaringen alleen worden uitgevoerd als niet aan de voorwaarde wordt voldaan, wordt de verklaring binnen de bewaker niet uitgevoerd. Dat is de reden waarom print("Condition met")
wordt uitgevoerd en de uitvoer voldoet aan de voorwaarde op het scherm.
Laten we nu de voorwaarde veranderen in false als:
Voorbeeld 2: guard statement moet de scope verlaten
guard false else ( print("Condition not met") ) print("Condition met")
In het bovenstaande programma evalueert de bewakingstoestand naar false
. Dus de instructie print("Condition not met")
in else zou moeten worden uitgevoerd. Maar je krijgt een foutmelding dat het 'bewaker'-lichaam er niet doorheen kan vallen, overweeg een' terugkeer 'of' worp 'te gebruiken om de scope te verlaten.
De foutmelding in eenvoudige woord betekent, moet je programma controle te brengen van de bewaker opgenomen met behulp van return
, break
, continue
of throw
uitspraken. Voor nu gaan we gebruiken return
. En aangezien de return
instructie alleen binnen een functie kan worden gebruikt, gaan we bovenstaande code in Swift Functions omhullen.
Voorbeeld 3: bewakingsverklaring binnen een functie
We kunnen de guard statement binnen gebruiken in een functie in Swift als:
func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call")
Wanneer u het bovenstaande programma uitvoert, is de uitvoer:
Aan voorwaarde niet voldaan Hallo na functieaanroep
In het bovenstaande programma evalueert de bewakerconditie naar false
, daarom worden de uitspraken binnen de bewaker uitgevoerd. De eerste instructie print("Condition not met")
geeft als uitvoer Conditie niet voldaan in de console.
En de instructie return
beëindigt de uitvoering van een functie en de instructie print("Hello, after function call")
nadat de functieaanroep is uitgevoerd, die Hallo uitvoert na functieaanroep in de console.
Voorbeeld 4: Bewaker met opties
We hebben in Swift Optionals het gebruik gezien van if-let
om een optional. We kunnen echter ook een guard statement gebruiken in plaats van if-let
een optioneel uit te pakken met één voordeel. Het belangrijkste voordeel van het uitpakken van een optie met beschermkap in plaats van dat if-let
we de omvang van de uitgepakte variabele kunnen vergroten.
Laten we dit in het onderstaande voorbeeld bekijken:
func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
Wanneer u het bovenstaande programma uitvoert, is de uitvoer:
Naam is nihil. Kan niet verwerken
In het bovenstaande programma kunt u zien dat de uitgepakte waarde temp wordt gebruikt buiten het bereik dat is gedefinieerd door de bewakingsverklaring. Omdat naam optioneel is gedefinieerd en geen waarde bevat, kan de guard-instructie de waarde niet uitpakken.
Dus de instructies binnen de bewaker voeren anders uit, welke naam afdrukt is nihil. Kan de uitvoer niet verwerken en beëindigt de functie met return
instructie. De equivalente code van de bovenstaande 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()
De bovenstaande twee verklaringen zijn beide geldig en hebben hetzelfde werk. Maar als u de if-let-instructie gebruikt, kunt u de uitgepakte waarde niet buiten de if-let-instructie gebruiken. Maar met guard statement kunt u de uitgepakte waarde door de hele functie heen gebruiken.
Voorbeeld 5: Bewaker met meerdere voorwaarden
Guard-instructies kunnen ook meerdere voorwaarden koppelen, gescheiden door komma (,) als:
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()
Wanneer u het bovenstaande programma uitvoert, is de uitvoer:
Naam is nul of een lege tekenreeks. Kan niet verwerken
In het bovenstaande programma bevat de guard-instructie twee voorwaarden gescheiden door komma's.
De eerste voorwaarde let temp = name
pakt een optional uit die true
in ons geval terugkeert en de tweede voorwaarde temp.count> 0
controleert of de uitgepakte string meer dan 0 tekens heeft, wat false
in ons voorbeeld resulteert in.
Daarom voert de instructie binnen de instructie guard de instructie uit print("Name is nil or an empty string. Cannot process")
die als uitvoer Naam is nul of een lege tekenreeks. Kan niet verwerken in de console en beëindigt de functie met return
instructie.