In diesem Artikel erfahren Sie, wie Sie die Guard-Anweisung verwenden, um den Ablauf der Programmausführung zu steuern.
Swift If-Anweisung beschreibt, wie Sie Aktionen basierend auf einer bestimmten Bedingung (Boolescher Wert) ausführen können. In diesem Artikel werden wir die Vorteile der Guard-Anweisung gegenüber der if-Anweisung untersuchen, um den Programmfluss zu steuern und einfacheren und saubereren Code zu schreiben.
Swift Guard Statement
Die Hauptanwendung der Schutzanweisung besteht darin, die Programmsteuerung unter bestimmten Bedingungen aus einem Bereich zu übertragen. Diese Anweisungen ähneln den if-Anweisungen, die Anweisungen basierend auf einer bestimmten Bedingung (boolescher Wert) ausführen. Im Gegensatz zu if werden die guard-Anweisungen jedoch nur ausgeführt, wenn bestimmte Bedingungen nicht erfüllt sind.
Darüber hinaus müssen Aussagen innerhalb des Schutzes aus dem Geltungsbereich austreten. Deshalb haben wir auf Anwenderprogramm Steueranweisungen return
, break
, continue
oder throw
am Ende der Schutzerklärung.
Syntax der Guard-Anweisung
Schutzausdruck else (// Anweisungen // müssen eine Steueranweisung enthalten: return, break, continue oder throw.)
- Hier ist expression ein boolescher Ausdruck (gibt entweder
true
oder zurückfalse
). - Wenn der Ausdruck ausgewertet wird
false
, werden Anweisungen innerhalb des Codeblocks vonguard
ausgeführt. - Wenn der Ausdruck mit ausgewertet wird
true
, werden Anweisungen innerhalb des Codeblocks vonguard
von der Ausführung übersprungen.
Wie funktioniert die Wachaussage?
Hinweis: Das Ende der Schutzerklärung muss eine Steuererklärung enthalten return
, break
, continue
oder throw
.
Beispiel 1: Wie funktioniert die Guard-Anweisung?
Eine einfache gültige Wachaussage lautet wie folgt:
guard true else ( print("Condition not met") ) print("Condition met")
Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:
Bedingung erfüllt
Im obigen Programm enthält guard einen booleschen Wert true (Bedingung ist erfüllt). Da Guard-Anweisungen nur ausgeführt werden, wenn die Bedingung nicht erfüllt ist, wird die Anweisung innerhalb des Guard nicht ausgeführt. Deshalb print("Condition met")
wird ausgeführt und Bedingung auf dem Bildschirm erfüllt .
Ändern wir nun die Bedingung in false als:
Beispiel 2: Die Guard-Anweisung muss den Gültigkeitsbereich verlassen
guard false else ( print("Condition not met") ) print("Condition met")
In dem obigen Programm wird die Schutzbedingung zu ausgewertet false
. Die Anweisung print("Condition not met")
in else sollte also ausgeführt werden. Es wird jedoch eine Fehlermeldung angezeigt, dass der 'Wach'-Körper möglicherweise nicht durchfällt. Verwenden Sie zum Verlassen des Bereichs den Wert' Zurück 'oder' Wurf '.
Die Fehlermeldung in einfachem Wort bedeutet, müssen Sie die Programmsteuerung von dem Schutz Anweisung zur Übertragung mit return
, break
, continue
oder throw
Aussagen. Für jetzt werden wir verwenden return
. Und da die return
Anweisung nur innerhalb einer Funktion verwendet werden kann, werden wir den obigen Code in Swift-Funktionen einschließen.
Beispiel 3: Guard-Anweisung innerhalb einer Funktion
Wir können die Guard-Anweisung in einer Funktion in Swift wie folgt verwenden:
func someFunction() ( guard false else ( print("Condition not met") return ) print("Condition met") ) someFunction() print("Hello after function call")
Wenn Sie das obige Programm ausführen, lautet die Ausgabe wie folgt:
Bedingung nicht erfüllt Hallo nach Funktionsaufruf
In dem obigen Programm wird die Schutzbedingung ausgewertet false
, daher werden die Anweisungen innerhalb der Schutzbedingung ausgeführt. Die erste Anweisung print("Condition not met")
gibt die Bedingung aus, die in der Konsole nicht erfüllt ist .
Und die Anweisung return
beendet die Ausführung einer Funktion und die Anweisung print("Hello, after function call")
nach der Ausführung des Funktionsaufrufs gibt Hallo nach dem Funktionsaufruf in der Konsole aus.
Beispiel 4: Wache mit Optionen
Wir haben in Swift Optionals die Verwendung von gesehen if-let
, um ein optionales zu entpacken. Wir können jedoch auch eine Guard-Anweisung anstelle von verwenden, if-let
um eine Option mit einem Vorteil auszupacken. Der Hauptvorteil des Auspackens einer Option mit Guard anstelle von if-let
besteht darin, dass wir den Umfang der ausgepackten Variablen erhöhen können.
Sehen wir uns das folgende Beispiel an:
func changeOptionalStringToUpperCase() ( var name:String? guard let temp = name else ( print("Name is nil. Cannot process") return ) print("Uppercased:(temp.uppercased())") ) changeOptionalStringToUpperCase()
Wenn Sie das obige Programm ausführen, lautet die Ausgabe wie folgt:
Name ist null. Kann nicht verarbeiten
Im obigen Programm können Sie sehen, dass der nicht verpackte Wert temp außerhalb des durch die guard-Anweisung definierten Bereichs verwendet wird. Da name optional definiert ist und den Wert nil enthält, kann der Wert von der guard-Anweisung nicht entpackt werden.
Die Anweisungen in guard else werden also ausgeführt, wobei ausgegeben wird, dass Name gleich Null ist. Kann in der Ausgabe nicht verarbeitet werden und beendet die Funktion mit return
Anweisung. Der äquivalente Code der obigen Guard-Anweisung if-else lautet:
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()
Hinweis oben Zwei Aussagen sind beide gültig und erledigen den gleichen Job. Mit der if-let-Anweisung können Sie den nicht umschlossenen Wert jedoch nicht außerhalb der if-let-Anweisung verwenden. Mit der Guard-Anweisung können Sie den entpackten Wert jedoch während der gesamten Funktion verwenden.
Beispiel 5: Wache mit mehreren Bedingungen
Guard-Anweisungen können auch mehrere durch Komma (,) getrennte Bedingungen wie folgt verketten:
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()
Wenn Sie das obige Programm ausführen, lautet die Ausgabe wie folgt:
Der Name ist null oder eine leere Zeichenfolge. Kann nicht verarbeiten
Im obigen Programm enthält die Guard-Anweisung zwei durch Komma getrennte Bedingungen.
Die erste Bedingung let temp = name
entpackt eine Option, die true
in unserem Fall zurückgegeben wird, und die zweite Bedingung temp.count> 0
prüft, ob die entpackte Zeichenfolge mehr als 0 Zeichen enthält, was false
in unserem Beispiel ausgewertet wird .
Daher führt die Anweisung in der Guard-Anweisung eine Anweisung aus, print("Name is nil or an empty string. Cannot process")
die Name als Null oder eine leere Zeichenfolge ausgibt . Kann nicht in der Konsole verarbeitet werden und beendet die Funktion mit return
Anweisung.