I denne artikkelen vil du lære å bruke vaktuttalelse for å kontrollere flyten av programutførelsen.
Swift If Statement beskriver hvordan du kan utføre handlinger basert på visse forhold (boolsk verdi). I denne artikkelen vil vi utforske fordelene med vaktuttalelse over om uttalelse for å kontrollere programflyten og skrive mer enklere og ren kode.
Swift Guard-uttalelse
Hovedbruken av vaktuttalelse er å overføre programkontroll utenfor et omfang under visse forhold. Disse utsagnene er like med hvis uttalelser som utfører uttalelser basert på visse betingelser (boolsk verdi), men i motsetning til hvis, går vaktuttalelsene bare når visse betingelser ikke er oppfylt.
Videre må uttalelser inne i vakta komme ut av omfanget. Derfor må vi bruker program kontroll uttalelser return
, break
, continue
eller throw
på slutten av vakten uttalelse.
Syntaks for vaktuttalelse
vaktuttrykk ellers (// uttalelser // må inneholde en kontrolluttalelse: returnere, bryte, fortsette eller kaste.)
- Her er uttrykk et boolsk uttrykk (returnerer enten
true
ellerfalse
). - Hvis uttrykket blir evaluert til
false
, blir utsagn i kodeblokkenguard
utført. - Hvis uttrykket blir evaluert til
true
,guard
hoppes utsagn i kodeblokken av fra utførelse.
Hvordan fungerer vakterklæring?
Merk: Slutten av vakt uttalelsen må inneholde en kontroll utsagn return
, break
, continue
eller throw
.
Eksempel 1: Hvordan vaktuttalelse fungerer?
En enkel gyldig vaktuttalelse er som nedenfor:
guard true else ( print("Condition not met") ) print("Condition met")
Når du kjører programmet, vil utdataene være:
Tilstand oppfylt
I det ovennevnte programmet inneholder vakt en boolsk verdi sann (betingelsen er oppfylt). Siden vaktuttalelser bare kjører når vilkåret ikke er oppfylt, blir ikke utsagnet inne i vakt utført. Derfor print("Condition met")
er utført og utgangsbetingelser oppfylt på skjermen.
La oss nå endre tilstanden til falsk som:
Eksempel 2: vaktuttalelse må gå ut av omfanget
guard false else ( print("Condition not met") ) print("Condition met")
I programmet ovenfor evalueres vakttilstanden til false
. Så uttalelsen print("Condition not met")
i annet skal utføres. Men du vil få en feilmelding som sier at "vakt" ikke faller gjennom, bør du vurdere å bruke "retur" eller "kaste" for å gå ut av omfanget.
Feilmeldingen i enkle ordet betyr, må du overføre program kontroll fra vakt setning med return
, break
, continue
eller throw
uttalelser. For nå skal vi bruke return
. Og siden return
uttalelse bare kan brukes i en funksjon, skal vi pakke over koden i Swift Functions.
Eksempel 3: vaktuttalelse inne i en funksjon
Vi kan bruke vaktmeldingen inne i en funksjon 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 kjører programmet ovenfor, vil utdataene være:
Betingelsen ikke oppfylt Hei etter funksjonsanrop
I det ovennevnte programmet evalueres vakttilstanden til false
, og derfor utføres uttalelsene inne i vakta. Den første setningen print("Condition not met")
gir ut Betingelsen ikke oppfylt i konsollen.
Og uttalelsen return
avslutter utførelsen av en funksjon og uttalelsen print("Hello, after function call")
etter at funksjonssamtalen utføres som sender ut Hello etter funksjonsanrop i konsollen.
Eksempel 4: Vakt med tilleggsutstyr
Vi har sett i Swift Optionals bruken av if-let
å pakke ut et valgfritt. Imidlertid kan vi også bruke vaktuttalelse i stedet if-let
for å pakke ut en valgfri med en fordel. Den største fordelen med å pakke ut et valgfritt med vakt i stedet for if-let
er at vi kan øke omfanget av den uåpnede variabelen.
La oss se dette i eksemplet nedenfor:
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 kjører programmet ovenfor, vil utdataene være:
Navnet er null. Kan ikke behandle
I det ovennevnte programmet kan du se at den uåpnede verditempen brukes utenfor omfanget som er definert av vaktuttalelse. Siden navnet er definert valgfritt og inneholder nullverdi, klarer ikke vaktuttalelsen å pakke ut verdien.
Så, uttalelsene på vakt ellers utfører hvilke utskrifter Navnet er null. Kan ikke behandle i utgangen og avslutter funksjonen med return
uttalelse. Tilsvarende kode for ovennevnte vaktuttalelse hvis ellers uttalelse er:
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()
Merknad over to utsagn er begge gyldige og gjør den samme jobben. Men ved bruk av if-let-setning kan du ikke bruke den uåpnede verdien utenfor if-let-setningen. Men med vaktuttalelse kan du bruke den uåpnede verdien gjennom funksjonen.
Eksempel 5: Vakt med flere forhold
Vaktuttalelser kan også kjede flere forhold atskilt med komma (,) 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 kjører programmet ovenfor, vil utdataene være:
Navnet er null eller en tom streng. Kan ikke behandle
I ovennevnte program inneholder vaktuttalelsen to forhold atskilt med komma.
Den første betingelsen let temp = name
pakker ut et valgfritt som returnerer true
i vårt tilfelle, og den andre tilstanden temp.count> 0
sjekker om den uåpnede strengen har mer enn 0 tegn som evalueres til false
i vårt eksempel.
Derfor kjører utsagnet i vaktuttalelsen uttalelse print("Name is nil or an empty string. Cannot process")
som sender ut Navnet er null eller en tom streng. Kan ikke behandle i konsollen og avslutter funksjonen med return
uttalelse.