Kiire valvuri avaldus (koos näidetega)

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, continuevõi throwlõ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 truevõi false).
  • Kui avaldise väärtuseks hinnatakse false, guardkäivitatakse lause ploki sees olevad avaldused .
  • Kui avaldise väärtuseks hinnatakse true, guardjä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, continuevõ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, continuevõi throwavaldused. Praegu kavatseme seda kasutada return. Kuna returnavaldust 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 returnlõ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-letvaliku lahtipakkimise kasutamist . Siiski võime if-letvalikulise ühe eelisega lahtipakkimise asemel kasutada ka valvelauset. Peamine eelis, kui if-letpakume 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 returnavaldusega. Ü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 = nametühistab valikulise, mis naaseb truemeie puhul, ja teine ​​tingimus temp.count> 0kontrollib, kas pakkimata stringil on rohkem kui 0 tähemärki, mida falsemeie 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 returnavaldusega.

Huvitavad Artiklid...