V tomto článku se naučíte používat strážní příkaz k řízení toku provádění vašeho programu.
Příkaz Swift If popisuje, jak můžete provádět akce na základě určité podmínky (logická hodnota). V tomto článku prozkoumáme výhody strážního příkazu over if pro řízení toku programu a zápis jednoduššího a čistého kódu.
Prohlášení společnosti Swift Guard
Hlavní použití strážného prohlášení je za určitých podmínek přenést kontrolu programu z rozsahu. Tyto příkazy jsou podobné příkazům if, které provádějí příkazy na základě určité podmínky (logická hodnota), ale na rozdíl od if se příkazy guard spouštějí pouze tehdy, když nejsou splněny určité podmínky.
Kromě toho musí výroky uvnitř stráže opustit rozsah. Proto musíme s kontrolními uživatelský program prohlášení return
, break
, continue
nebo throw
na konci příkazu stráže.
Syntaxe prohlášení stráže
strážný výraz else (// příkazy // musí obsahovat kontrolní příkaz: návrat, konec, pokračování nebo hod.)
- Zde je výraz booleovský výraz (vrací buď
true
nebofalse
). - Pokud je výraz vyhodnocen na
false
, budou provedeny příkazy uvnitř bloku kóduguard
. - Pokud je výraz vyhodnocen na
true
, příkazy uvnitř bloku kóduguard
jsou přeskočeny z provedení.
Jak funguje strážní prohlášení?
Poznámka: Konec příkazu stráž musí obsahovat prohlášení kontrolní return
, break
, continue
nebo throw
.
Příklad 1: Jak funguje strážní prohlášení?
Jednoduché platné prohlášení o stráži je uvedeno níže:
guard true else ( print("Condition not met") ) print("Condition met")
Když spustíte program, výstup bude:
Podmínka splněna
Ve výše uvedeném programu obsahuje stráž logickou hodnotu true (podmínka je splněna). Vzhledem k tomu, že strážní příkazy běží pouze v případě, že podmínka není splněna, příkaz uvnitř strážce se neprovede. Proto print("Condition met")
se provede a na obrazovce se splní podmínka výstupu .
Nyní změňme podmínku na false jako:
Příklad 2: Prohlášení strážce musí opustit obor
guard false else ( print("Condition not met") ) print("Condition met")
Ve výše uvedeném programu je stav stráže vyhodnocen jako false
. Takže příkaz print("Condition not met")
uvnitř else by měl být proveden. Zobrazí se vám ale chyba, že tělo strážného nemusí spadnout, zvažte použití možnosti „návrat“ nebo „hod“ k opuštění oboru.
Chybová zpráva v jednoduchých slovních prostředků, je třeba převést řízení programu z výkazu strážní pomocí return
, break
, continue
nebo throw
prohlášení. Prozatím použijeme return
. A protože return
příkaz lze použít pouze uvnitř funkce, zabalíme výše uvedený kód do funkcí Swift.
Příklad 3: Ochranný příkaz uvnitř funkce
Můžeme použít příkaz guard uvnitř funkce ve Swiftu jako:
func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call")
Když spustíte výše uvedený program, výstup bude:
Podmínka nesplněna Dobrý den po volání funkce
Ve výše uvedeném programu se podmínka stráže vyhodnotí na false
, proto se provádějí příkazy uvnitř stráže. První příkaz print("Condition not met")
vydává podmínku, která v konzole není splněna .
A příkaz return
ukončí provádění funkce a příkaz print("Hello, after function call")
po provedení volání funkce provede výstup Hello po volání funkce v konzole.
Příklad 4: Stráž s volitelnými doplňky
Ve Swift Optionals jsme viděli použití if-let
rozbalit volitelný doplněk. Můžeme však také použít strážný příkaz místo if-let
pro rozbalení volitelného s jednou výhodou. Hlavní výhodou rozbalení volitelného s ochranou namísto if-let
je, že můžeme zvětšit rozsah rozbalené proměnné.
Uvidíme to v příkladu níže:
func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
Když spustíte výše uvedený program, výstup bude:
Jméno je nulové. Nelze zpracovat
Ve výše uvedeném programu můžete vidět, že teplota bez zabalené hodnoty se používá mimo rozsah definovaný příkazem guard. Vzhledem k tomu, že název je definován volitelně a obsahuje nulovou hodnotu, příkaz guard nerozbalí hodnotu.
Takže příkazy uvnitř stráže else provedou, které vytiskne Name, je nulové. Nelze zpracovat výstup a ukončí funkci return
příkazem. Ekvivalentní kód výše uvedeného prohlášení strážného 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()
Všimněte si, že výše uvedená dvě prohlášení jsou platná a dělají stejnou práci. Ale pomocí příkazu if-let nemůžete použít nerozbalenou hodnotu mimo příkaz if-let. Ale s příkazem stráž můžete použít nerozbalenou hodnotu prostřednictvím funkce out.
Příklad 5: Stráž s více podmínkami
Prohlášení strážce mohou také řetězit více podmínek oddělených čárkou (,) jako:
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()
Když spustíte výše uvedený program, výstup bude:
Název je nulový nebo prázdný řetězec. Nelze zpracovat
Ve výše uvedeném programu obsahuje příkaz guard dvě podmínky oddělené čárkou.
První podmínka let temp = name
rozbalí volitelný prvek, který se true
v našem případě vrátí, a druhá podmínka temp.count> 0
zkontroluje, zda má rozbalený řetězec více než 0 znaků, což se false
v našem příkladu vyhodnotí .
Proto příkaz uvnitř příkazu guard provádí příkaz, print("Name is nil or an empty string. Cannot process")
jehož výstupem Name je nula nebo prázdný řetězec. Nelze zpracovat v konzole a ukončí funkci return
příkazem.