Ebben a cikkben megtanulja használni a guard utasításokat a program végrehajtásának folyamatának szabályozásához.
A Swift If utasítás azt írja le, hogyan hajthatja végre a műveleteket bizonyos feltételek (logikai érték) alapján. Ebben a cikkben megvizsgáljuk az őr utasításának előnyeit, ha a program folyamata vezérli az egyszerűbb és tiszta kódot.
Gyors őrség nyilatkozata
Az őrző nyilatkozat fő célja, hogy a programirányítást bizonyos feltételek mellett átruházza a hatókörről. Ezek az állítások hasonlítanak azokhoz az utasításokhoz, amelyek bizonyos feltétel (boolean érték) alapján hajtanak végre utasításokat, de ettől eltérően a biztonsági utasítások csak akkor futnak, ha bizonyos feltételek nem teljesülnek.
Ezenkívül az őrségen belüli kijelentéseknek ki kell lépniük a hatályból. Ezért van, hogy a felhasználói programot vezérlő utasítások return
, break
, continue
vagy throw
a végén az őr nyilatkozatot.
Az őrség nyilatkozatának szintaxisa
guard kifejezés else (// utasításoknak // tartalmaznia kell egy ellenőrző utasítást: visszatérés, törés, folytatás vagy dobás.)
- Itt a kifejezés logikai kifejezés (vagy a,
true
vagy afalse
) adja vissza . - Ha a kifejezést értékelik
false
,guard
akkor végrehajtják az utasításokat a kódblokkban . - Ha a kifejezést értékelik
true
, a kódblokk belsejében lévő utasításokguard
kihagyásra kerülnek a végrehajtásból.
Hogyan működik az őrség nyilatkozata?
Megjegyzés: A végén az őr nyilatkozatot kell tartalmaznia ellenőrzési nyilatkozatot return
, break
, continue
vagy throw
.
1. példa: Hogyan működik az őrség nyilatkozata?
Egy egyszerű érvényes őrségi nyilatkozat a következő:
guard true else ( print("Condition not met") ) print("Condition met")
A program futtatásakor a kimenet a következő lesz:
Feltétel teljesült
A fenti programban a guard egy true logikai értéket tartalmaz (a feltétel teljesül). Mivel az őrző nyilatkozatok csak akkor futnak, amikor a feltétel nem teljesül, az őrségen belüli utasítás nem kerül végrehajtásra. Ezért print("Condition met")
van végrehajtva, és a kimenetek feltétel teljesül a képernyőn.
Most változtassuk meg a feltételt hamisra:
2. példa: az őrség nyilatkozatának ki kell lépnie a hatókörből
guard false else ( print("Condition not met") ) print("Condition met")
A fenti programban az őrállapot értéke a false
. Tehát a print("Condition not met")
más részen belüli állítást végre kell hajtani. De hibát fog kapni, mondván, hogy az „őr” teste nem esik át, fontolja meg a „visszatérés” vagy a „dobás” használatát a hatókörből való kilépéshez.
A hibaüzenet egyszerű szó jelentését, akkor át kell programú vezérlés az őr nyilatkozatból return
, break
, continue
vagy throw
nyilatkozatokat. Egyelőre használni fogjuk return
. És mivel az return
utasítás csak egy függvényen belül használható, a fenti kódot a Swift Funkciókba fogjuk csomagolni.
3. példa: őrző utasítás egy függvényen belül
Használhatjuk a belső utasításokat a Swift egyik funkciójában, mint:
func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call")
A fenti program futtatásakor a kimenet a következő lesz:
A feltétel nem teljesült Helló a funkcióhívás után
A fenti programban az őr állapot feltételez false
, ezért az őrségen belüli utasítások végrehajtásra kerülnek. Az első állítás print("Condition not met")
kimenetek állapota nem felel meg a konzolon.
És az utasítás return
megszünteti a függvény végrehajtását, és az utasítás azt print("Hello, after function call")
követően, hogy a függvényhívás végrehajtja, amely a Hello után adja ki a függvényhívást a konzolon.
4. példa: Őr opciókkal
A Swift Optionals-ban láthattuk az opcionális if-let
csomagolásának használatát . Használhatunk azonban őrző nyilatkozatot a if-let
választható opciók kibontásához is, egy előnnyel. Az opcionális védővel történő kibontásának legfőbb előnye, if-let
hogy növeljük a kibontott változó hatókörét.
Lássuk ezt az alábbi példában:
func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
A fenti program futtatásakor a kimenet a következő lesz:
A név nulla. Nem lehet feldolgozni
A fenti programban láthatja, hogy a becsomagolatlan értékhőmérsékletet a Guard utasítás által meghatározott körön kívül használják. Mivel a név opcionálisan definiált és nulla értéket tartalmaz, a guard utasítás nem bontja ki az értéket.
Tehát az őrségen belüli utasítások végrehajtják, hogy melyik név nyomtassa ki a nulla értéket. Nem lehet feldolgozni a kimenetben, és utasítással fejezi be a függvényt return
. A fenti őr nyilatkozat ekvivalens kódja:
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()
Két fenti megállapítás egyaránt érvényes, és ugyanazt a munkát végzi. De az if-let utasítás használatával nem használhatja a kibontott értéket az if-let utasításon kívül. De a guard utasítással a kibontott értéket a függvényen keresztül is felhasználhatja.
5. példa: Több feltételes őr
Az őrök állításai több, vesszővel (,) elválasztott feltételt is láncolhatnak:
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()
A fenti program futtatásakor a kimenet a következő lesz:
A név nulla vagy üres karakterlánc. Nem lehet feldolgozni
A fenti programban az őrségi nyilatkozat két feltételt tartalmaz vesszővel elválasztva.
Az első feltétel let temp = name
kibont egy választható opciót, amely true
a mi esetünkben visszatér , a második feltétel pedig azt temp.count> 0
ellenőrzi, hogy a kibontott karakterlánc nem tartalmaz-e 0-nál több karaktert, ami false
a példánkban megadott értéknek felel meg.
Ezért a guard utasításban lévő utasítás végrehajtja azt az utasítást, print("Name is nil or an empty string. Cannot process")
amely a Nulla értéket vagy üres karakterláncot adja ki. Nem lehet feldolgozni a konzolban, és a funkciót return
utasítással fejezi be.