Selles artiklis õpitakse valveväljendit kasutama programmi käivitamise voo juhtimiseks.
Swift If-lause kirjeldab, kuidas saate teatud tingimuste (tõeväärtuse väärtuse) põhjal toiminguid teha. Selles artiklis uurime valvuri avalduse eeliseid, kui avaldus programmivoo juhtimiseks ning lihtsama ja puhta koodi kirjutamiseks.
Kiire valvuri avaldus
Valvuri avalduse peamine kasutusala on teatud tingimustel programmi juhtimise üleviimine reguleerimisalast. Need laused on sarnased juhul, kui avaldused, mis täidavad avaldusi teatud tingimuste (tõeväärtuse väärtuse) alusel, kuid erinevalt juhul, kui valvurilauseid käitatakse ainult siis, kui teatud tingimused pole täidetud.
Pealegi peavad valvuri sees olevad avaldused reguleerimisalast väljuma. Seetõttu peame kasutaja programmi kontrolli avaldused return
, break
, continue
või throw
lõpus valvur avaldusega.
Valveavalduse süntaks
valveavaldus muu (// avaldused // peavad sisaldama kontrolllauset: tagasi, katkestama, jätkama või viskama.)
- Siin on avaldis logiline avaldis (tagastab kas
true
võifalse
). - Kui avaldise väärtuseks hinnatakse
false
,guard
käivitatakse lause ploki sees olevad avaldused . - Kui avaldise väärtuseks hinnatakse
true
,guard
jäetakse koodiploki sees olevad laused täitmisest vahele.
Kuidas valvuri avaldus töötab?
Märkus: lõpp valvur avaldus peab sisaldama kontrolli avalduse return
, break
, continue
või throw
.
Näide 1: Kuidas valvuri avaldus töötab?
Lihtne kehtiv valvuri avaldus on järgmine:
guard true else ( print("Condition not met") ) print("Condition met")
Programmi käivitamisel on väljund järgmine:
Tingimus täidetud
Ülalolevas programmis sisaldab guard tõeväärtust tõeväärtus (tingimus on täidetud). Kuna valvuri avaldused töötavad ainult siis, kui tingimus pole täidetud, ei täideta valvuri sees olevat avaldust. Sellepärast print("Condition met")
täidetakse ja väljundid on ekraanil täidetud .
Nüüd muudame tingimuse valeks kui:
Näide 2: valvuri avaldus peab reguleerimisalast väljuma
guard false else ( print("Condition not met") ) print("Condition met")
Ülaltoodud programmis saab valvuri seisund hinnangu false
. Niisiis print("Condition not met")
peaks mujal olev lause olema täidetud. Kuid saate vea, öeldes, et "valvur" keha ei pruugi läbi kukkuda, kaaluge ulatusest väljumiseks tagasituleku või viske kasutamist.
Veateadet lihtne sõna abil, peate kanda programmi juhtimine valvur avaldus kasutades return
, break
, continue
või throw
avaldused. Praegu kavatseme seda kasutada return
. Kuna return
avaldust saab kasutada ainult funktsiooni sees, siis pakume koodi ülal Swift Funktsioonidesse.
Näide 3: valvuri avaldus funktsiooni sees
Saame kasutada Swifti funktsioonis valvuri lauset järgmiselt:
func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call")
Ülaltoodud programmi käivitamisel on väljund:
Tingimus pole täidetud Tere pärast funktsioonikõnet
Ülaltoodud programmis hindab valvuri seisund seda false
, mistõttu täidetakse valvesisesed väited. Esimene avaldus print("Condition not met")
väljundid seisukord ei ole täidetud konsoolis.
Ja avalduse return
lõpeb täitmise funktsiooni ja avaldus print("Hello, after function call")
pärast funktsioon kõne vormistab mis väljastab Tere pärast funktsioon kõne konsoolis.
Näide 4: Valikuga valvur
Oleme Swift Optionalsis näinud if-let
valiku lahtipakkimise kasutamist . Siiski võime if-let
valikulise ühe eelisega lahtipakkimise asemel kasutada ka valvelauset. Peamine eelis, kui if-let
pakume valikulise koos kaitsega lahti , on see, et saame pakkimata muutuja ulatust suurendada.
Vaatame seda allpool toodud näites:
func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
Ülaltoodud programmi käivitamisel on väljund:
Nimi on null. Ei saa töödelda
Ülaltoodud programmis näete, et pakkimata väärtuse temp kasutatakse väljaspool valvuri avalduses määratletud ulatust. Kuna nimi on määratletud valikulisena ja sisaldab nullväärtust, ei õnnestu valvuriväljund väärtust lahti pakkida.
Niisiis täidavad valvuri sees olevad laused, mis prindib nime. Väljundis ei saa töödelda ja funktsioon lõpetatakse return
avaldusega. Ülaltoodud valveavalduse if-else samaväärne kood on:
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()
Kahe väite kohal olev märkus on nii kehtiv kui ka sama töö. Kuid kui kasutate lauset if-let, ei saa pakkimata väärtust kasutada väljaspool lauset if-let. Kuid valvurlausega saate pakendamata väärtust funktsiooni kaudu kasutada.
Näide 5: Valvur mitme tingimusega
Valvurite avaldused võivad ka ketta (,) abil eraldada mitu tingimust:
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()
Ülaltoodud programmi käivitamisel on väljund:
Nimi on null või tühi string. Ei saa töödelda
Ülaltoodud programmis sisaldab valvuri avaldus kahte komaga eraldatud tingimust.
Esimene tingimus let temp = name
tühistab valikulise, mis naaseb true
meie puhul, ja teine tingimus temp.count> 0
kontrollib, kas pakkimata stringil on rohkem kui 0 tähemärki, mida false
meie näites hinnatakse .
Seetõttu täidab valvuri avalduses olev lause lause, print("Name is nil or an empty string. Cannot process")
mille väljundiks Nimi on null või tühi string. Konsoolis ei saa töödelda ja funktsioon lõpetatakse return
avaldusega.