Swift Guard-verklaring (met voorbeelden)

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, continueof throwaan 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 trueof false).
  • Als de uitdrukking wordt geëvalueerd naar false, worden instructies in het codeblok van guarduitgevoerd.
  • Als de uitdrukking wordt geëvalueerd naar true, worden instructies in het codeblok van guardovergeslagen voor uitvoering.

Hoe Guard Statement werkt?

Opmerking: Het einde van de wacht verklaring moet een control statement bevatten return, break, continueof 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, continueof throwuitspraken. Voor nu gaan we gebruiken return. En aangezien de returninstructie 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 returnbeë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-letom een ​​optional. We kunnen echter ook een guard statement gebruiken in plaats van if-leteen optioneel uit te pakken met één voordeel. Het belangrijkste voordeel van het uitpakken van een optie met beschermkap in plaats van dat if-letwe 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 returninstructie. 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 = namepakt een optional uit die truein ons geval terugkeert en de tweede voorwaarde temp.count> 0controleert of de uitgepakte string meer dan 0 tekens heeft, wat falsein 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 returninstructie.

Interessante artikelen...