Izjava o hitrem varovanju (z primeri)

V tem članku se boste naučili uporabljati izjavo za zaščito za nadzor poteka izvajanja vašega programa.

Izjava Swift If opisuje, kako lahko izvajate dejanja na podlagi določenega pogoja (logična vrednost). V tem članku bomo raziskali prednosti stavka za nadzor nad stavkom if za nadzor programskega toka in pisanje preprostejše in čistejše kode.

Izjava hitre straže

Glavna uporaba varovalne izjave je pod določenimi pogoji prenesti nadzor programa izven obsega. Ti stavki so podobni stavkom if, ki izvajajo stavke na podlagi določenega pogoja (logična vrednost), vendar se za razliko od if stavki varovanja izvajajo le, če določeni pogoji niso izpolnjeni.

Poleg tega morajo izjave znotraj varovala izstopiti iz obsega. Zato moramo izjav nadzora programa uporabnik return, break, continueali throwna koncu izjave straže.

Sintaksa izjave straže

 stražni izraz else (// stavki // morajo vsebovati kontrolni stavek: vrnitev, odmor, nadaljevanje ali metanje.) 
  • Tu je izraz logični izraz (vrne bodisi trueali false).
  • Če je izraz ovrednoten z false, guardse izvršijo stavki znotraj kodnega bloka .
  • Če je izraz ovrednoten z true, se stavki znotraj bloka kode guardpreskočijo iz izvajanja.

Kako deluje izjava o varovanju?

Opomba: Konec izjave straže mora vsebovati izjavo, nadzorni return, break, continueali throw.

Primer 1: Kako deluje izjava o varovanju?

Preprosta veljavna izjava o varovanju je spodaj:

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

Ko zaženete program, bo rezultat:

 Pogoj izpolnjen

V zgornjem programu varovalo vsebuje logično vrednost true (pogoj je izpolnjen). Ker se stavki varovanja izvajajo le, če pogoj ni izpolnjen, se izjava znotraj varovala ne izvrši. Zato print("Condition met")se izvrši in na zaslonu prikaže stanje pogoja .

Zdaj spremenimo pogoj na false kot:

Primer 2: stavek stavka mora zapustiti obseg

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

V zgornjem programu se stanje varovala oceni na false. Torej, izjavo print("Condition not met")znotraj else bi bilo treba izvršiti. Toda prišlo bo do napake s tem, da telo "varovalca" morda ne bo padlo skozi, razmislite o uporabi "vrnitve" ali "metanja" za izhod iz obsega.

Sporočilo o napaki v preprostih besed sredstev, ki jih potrebujejo za prenos nadzora programov iz izkaza čuvaj uporabo return, break, continueali throwizjave. Za zdaj bomo uporabili return. In ker se returnstavek lahko uporablja samo znotraj funkcije, bomo zgornjo kodo zavili v funkcije Swift.

Primer 3: stavek za varovanje znotraj funkcije

Izkaz čuvaj lahko uporabimo znotraj funkcije v Swiftu kot:

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

Ko zaženete zgornji program, bo rezultat:

 Pogoj ni izpolnjen Pozdravljeni po klicu funkcije 

V zgornjem programu se stanje zaščite oceni na false, zato se stavki v zaščiti izvršijo. Prvi stavek print("Condition not met")izpiše Pogoj v konzoli ni izpolnjen .

Stavek returnzaključi izvajanje funkcije in stavek print("Hello, after function call")po izvedbi klica funkcije, ki v konzoli prikaže Pozdravljeni po klicu funkcije .

Primer 4: Straža z neobveznimi člani

V Swift Optionals smo opazili uporabo if-letodvijanja neobveznega. Vendar pa lahko namesto, if-letda razstavimo neobvezno z eno prednostjo , uporabimo tudi izjavo o varovanju . Glavna prednost razpakiranja neobveznega s ščitnikom namesto tega if-letje, da lahko povečamo obseg odvite spremenljivke.

Poglejmo to v spodnjem primeru:

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

Ko zaženete zgornji program, bo rezultat:

Ime je nič. Ne morem obdelati

V zgornjem programu lahko vidite, da se razpakirana vrednost temp uporablja zunaj obsega, definiranega s stavkom guard. Ker je ime določeno neobvezno in vsebuje vrednost nič, stavek varovalke vrednosti ne odvije.

Torej, stavki znotraj varovala else izvršijo, kateri natisni Ime je nič. V izhodu ni mogoče obdelati in funkcijo zaključi z returnstavkom. Enakovredna koda zgornjega stavka stavka if-else je:

 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() 

Obvestilo zgoraj dve trditvi sta veljavni in opravljata enako delo. Toda z uporabo stavka if-let ne morete uporabiti razvite vrednosti zunaj stavka if-let. Toda z izjavo za zaščito lahko uporabite razpakirano vrednost skozi funkcijo out.

Primer 5: Straža z več pogoji

Izjave Guard lahko tudi vežejo več pogojev, ločenih z vejico (,), kot:

 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()

Ko zaženete zgornji program, bo rezultat:

Ime je nič ali prazen niz. Ne morem obdelati

V zgornjem programu stavek stavka vsebuje dva pogoja, ločena z vejico.

Prvi pogoj let temp = nameodvije neobvezno, ki se truev našem primeru vrne, drugi pogoj pa temp.count> 0preveri, ali ima nerazviti niz več kot 0 znakov, kar je ocenjeno falsev našem primeru.

Zato stavek znotraj stavka guard izvrši stavek, print("Name is nil or an empty string. Cannot process")ki izpiše Ime je nič ali prazen niz. V konzoli ni mogoče obdelati in funkcijo zaključi z returnizjavo.

Zanimive Članki...