Tässä artikkelissa opit käyttämään vartijalauseketta ohjaamaan ohjelman suorituksen kulkua.
Swift If -lauseke kuvaa, kuinka voit suorittaa toimintoja tiettyjen ehtojen (loogisen arvon) perusteella. Tässä artikkelissa tutkitaan vartijan lausunnon edut, jos lausunto hallitsee ohjelmavirtaa ja kirjoittaa yksinkertaisempaa ja selkeämpää koodia.
Nopea vartijalausunto
Vartijalausunnon pääasiallinen käyttötarkoitus on siirtää ohjelman hallinta pois tietyin ehdoin. Nämä lauseet ovat samanlaisia kuin jos lausekkeet, jotka suorittavat lauseita tietyn ehdon (loogisen arvon) perusteella, mutta toisin kuin suojauslausekkeet suoritetaan vain, kun tietyt ehdot eivät täyty.
Lisäksi vartijan sisällä olevien lausuntojen on poistuttava soveltamisalasta. Siksi meidän on käyttäjäkohtaisia hallintalauseet return
, break
, continue
tai throw
lopussa vartija lausuman.
Vartijan lausunnon syntaksi
vartijalauseke muu (// lausekkeiden // on sisällettävä ohjauslauseke: paluu, tauko, jatka tai heitä.)
- Tässä lauseke on looginen lauseke (palauttaa joko
true
taifalse
). - Jos lauseke arvioidaan
false
, suoritetaan lausekkeet koodilohkon sisälläguard
. - Jos lauseke arvioidaan
true
, koodilohkon sisällä olevat lauseetguard
ohitetaan suorituksesta.
Kuinka vartijan lausunto toimii?
Huom pää vartija selvitys on oltava ohjaus lausuman return
, break
, continue
tai throw
.
Esimerkki 1: Kuinka vartijan lausunto toimii?
Yksinkertainen voimassa oleva vartijalausunto on seuraava:
guard true else ( print("Condition not met") ) print("Condition met")
Kun suoritat ohjelmaa, tulos on:
Ehto täyttynyt
Yllä olevassa ohjelmassa guard sisältää loogisen arvon true (ehto täyttyy). Koska vartijalausekkeet suoritetaan vain, kun ehto ei täyty, vartijan sisällä olevaa lausetta ei suoriteta. Siksi print("Condition met")
se suoritetaan ja lähtöehdot täyttyvät näytöllä.
Vaihdetaan nyt ehto epätosi:
Esimerkki 2: vartijan lausunnon on poistuttava soveltamisalasta
guard false else ( print("Condition not met") ) print("Condition met")
Yllä olevassa ohjelmassa vartijan kunto arvioidaan false
. Joten print("Condition not met")
muualla olevan lausunnon pitäisi suorittaa. Mutta saat virheilmoituksen sanomalla, että vartijan runko ei välttämättä kaadu, harkitse paluu- tai heittotapaa poistuaksesi soveltamisalasta.
Virheilmoitus on yksinkertainen sana tarkoittaa, sinun täytyy siirtää ohjelman ohjauksen vartija lausuman käyttäen return
, break
, continue
tai throw
lausuntoja. Toistaiseksi aiomme käyttää return
. Ja koska return
lausetta voidaan käyttää vain funktion sisällä, aiomme kääri yllä olevan koodin Swift-funktioihin.
Esimerkki 3: vartijalauseke toiminnon sisällä
Voimme käyttää sisäpuolella olevaa vartijalauseketta Swiftin toiminnossa seuraavasti:
func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call")
Kun suoritat yllä olevan ohjelman, tulos on:
Ehto ei täyty Hei toiminnon kutsun jälkeen
Yllä olevassa ohjelmassa vartijan kunto arvioidaan false
, joten vartijan sisällä olevat lausunnot toteutetaan. Ensimmäinen lauseke print("Condition not met")
antaa ehdon, joka ei täyty konsolissa.
Ja käsky return
lopettaa toiminnon suorittamisen ja lauseke print("Hello, after function call")
sen jälkeen, kun funktiokutsu suorittaa, joka antaa Hello-funktion kutsun jälkeen konsolissa.
Esimerkki 4: Suoja lisävarusteilla
Olemme nähneet Swift Optionals if-let
-sovelluksessa valinnaisen avaamisen käytöstä . Voimme kuitenkin käyttää myös vartijalauseketta sen sijaan, if-let
että purat valinnaisen yhdellä edulla. Tärkein etu valinnaisen pakkauksen purkamisella suojan sijasta if-let
on, että voimme lisätä avaamattoman muuttujan laajuutta.
Katsotaanpa tämä alla olevassa esimerkissä:
func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
Kun suoritat yllä olevan ohjelman, tulos on:
Nimi on nolla. Ei voida käsitellä
Yllä olevassa ohjelmassa näet, että pakkaamatonta arvolämpötilaa käytetään vartijalausunnon määrittelemän alueen ulkopuolella. Koska nimi on määritelty valinnaiseksi ja sisältää nolla-arvon, vartijalauseke ei pysty avaamaan arvoa.
Joten vartijan sisällä olevat lauseet suorittavat, mikä tulostaa Nimi on nolla. Lähdössä ei voi käsitellä ja toiminto lopetetaan return
lauseella. Yllä olevan vartijalausekkeen if-else vastaava koodi 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()
Kahden ilmoituksen yläpuolella oleva huomautus on pätevä ja tekee samaa työtä. Mutta jos käytät if-let-käskyä, et voi käyttää avaamatonta arvoa if-let-lauseen ulkopuolella. Mutta vartijalausekkeella voit käyttää avaamatonta arvoa funktion kautta.
Esimerkki 5: Suoja useilla ehdoilla
Vartijalausekkeet voivat myös ketjuttaa useita pilkulla (,) erotettuja ehtoja seuraavasti:
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()
Kun suoritat yllä olevan ohjelman, tulos on:
Nimi on nolla tai tyhjä merkkijono. Ei voida käsitellä
Yllä olevassa ohjelmassa vartijan lausunto sisältää kaksi pilkulla erotettua ehtoa.
Ensimmäinen ehto let temp = name
purkaa valinnaisen, joka palaa true
tapauksessamme, ja toinen ehto temp.count> 0
tarkistaa, onko pakkaamattomassa merkkijonossa yli 0 merkkiä, mikä arvioidaan false
esimerkissämme.
Siksi vartijalausekkeen sisällä oleva käsky suorittaa lausekkeen, print("Name is nil or an empty string. Cannot process")
jonka nimi on nolla tai tyhjä merkkijono. Ei voi käsitellä konsolissa ja lopettaa toiminnon return
lauseella.