English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本文中,您将学习使用Guard语句来控制程序执行的流程。
Swift If 语句描述了如何基于特定条件(布尔值)执行操作。在本文中,我们将学习 guard 语句优于 if 语句的优点,以控制程序流,并编写更简单和干净的代码。
Guard语句语句的主要用途是在一定条件下将程序控制转移到某个范围之外。这些语句与基于特定条件(布尔值)执行语句的if语句类似,但与if不同,guard语句只在不满足某些条件时运行。
此外,guard 语句必须从范围中退出。因此,我们必须在 guard 语句的末尾使用用户程序控制语句return、break、continue或throw。
guard expression else { //语句 //必须包含一个控制语句: return、break、continue 或 throw。 }
Hier ist expression eine Boolean-Ausdrucksbedingung (returnt true oder false).
Falls der Wert der expression als false berechnet wird, wird die guard-Anweisung im Codeblock ausgeführt.
Falls der Wert der expression als true berechnet wird, wird die guard-Anweisung im Codeblock übersprungen.
Hinweis: Der Abschluss der guard-Anweisung muss eine Kontrollanweisung return, break, continue oder throw enthalten.
Ein einfaches gültiges guard-Statement ist wie folgt:
guard true else { print("条件不满足") } print("满足条件")
Wenn das Programm ausgeführt wird, lautet die Ausgabe:
满足条件
In dem obigen Programm enthält guard einen Boolean-Wert true (Bedingung erfüllt). Da die Guard-Anweisung nur dann ausgeführt wird, wenn die Bedingung nicht erfüllt ist, wird der Code innerhalb des guards nicht ausgeführt. Dies ist der Grund, warum print("满足条件") ausgeführt wird und "满足条件" auf dem Bildschirm ausgegeben wird.满足条件Grund.
Die Bedingung wird nun auf false geändert:
guard false else { print("条件不满足") } print("满足条件")
In dem obigen Programm ergibt die Berechnung des Schutzbedingungen-Werts false. Daher sollte das Statement print("Condition not met") im else-Bereich ausgeführt werden. Aber Sie erhalten eine Fehlermeldung:'guard' body may not fall through, consider using a 'return' or 'throw' to exit the scope.
Die Fehlermeldung bedeutet, dass Sie die Anweisungen return, break, continue oder throw verwenden müssen, um den Programmkontrollfluss von der Guard-Anweisung zu verlassen. Wir werden return verwenden. Da das return-Statement nur innerhalb einer Funktion verwendet werden kann, verpacken wir den obigen Code in eine Swift-Funktion.
Wir können in SwiftsFunktionDie Verwendung der guard-Anweisung ist wie folgt dargestellt:
func someFunction() { guard false else { print("条件不满足") return } print("满足条件") } someFunction() print("函数调用后输出 Hello")
Wenn Sie das obige Programm ausführen, wird die Ausgabe sein:
条件不满足 Hello wird nach der Funktion Aufruf ausgegeben.
In dem obigen Programm ergibt die Berechnung des guard-Bedingungs-Werts false, daher wird der Code innerhalb des guards ausgeführt. Das erste Statement print("条件不满足") gibt "条件不满足" im Konsolenfenster aus.:条件不满足
并且语句return终止函数的执行,同时print("Hello, after function call")函数调用执行后的语句在控制台中输出:函数调用后输出Hello
我们在Swift Optionals中已经看到使用if-let来解开一个Optional。但是,我们也可以使用guard语句代替if-let来展开可选语句,这有一个好处。使用guard而不是if-let展开可选变量的主要优点是,我们可以增加解包变量的作用域。
让我们在下面的示例中看到这一点:
func changeOptionalStringToUpperCase() { var name: String? guard let temp = name else { print("名称为nil。无法处理") return } print("大写:\(temp.uppercased())") } changeOptionalStringToUpperCase()
Wenn Sie das obige Programm ausführen, wird die Ausgabe sein:
名称为nil。无法处理
在上面的程序中,您可以看到未包装的值temp正在guard语句定义的范围之外使用。由于name被定义为可选且包含nil值,因此guard语句无法解包该值。
因此,在guard else中执行的语句打印Name为nil。无法在输出中处理,并用return语句终止函数。上述guard语句if else语句的等效代码为:
func changeOptionalStringToUpperCase() { var name: String? if let temp = name { print("大写:\(temp.uppercased())") } print("名称为nil。无法处理") return } //如何在这里访问?解决方案:使用Guard } changeOptionalStringToUpperCase()
注意,上面两个语句都是有效的,并且完成相同的工作。但是使用if-let语句时,不能在if-let语句之外使用未包装(unwrapped)值。但是使用守卫语句,您可以通过函数使用未包装(unwrapped)值。
Guard语句还可以链接多个条件,这些条件之间用逗号(,)分隔,如下所示:
func changeOptionalStringToUpperCase() { var name: String? = "" guard let temp = name, temp.count > 0 else { print("名称为nil或空字符串。无法处理") return } print("Großgeschrieben:\(temp.uppercased())") } changeOptionalStringToUpperCase()
Wenn Sie das obige Programm ausführen, wird die Ausgabe sein:
Name ist nil oder eine leere Zeichenfolge. Kann nicht bearbeitet werden
In dem obigen Programm enthält die guard-Anweisung zwei Bedingungen, die durch Komma getrennt sind.
Die erste Bedingung let temp = name hat einen Optional-Parameter entpackt, in unserem Beispiel gibt diese Bedingung true zurück, die zweite Bedingung temp.count > 0 überprüft, ob die entpackte Zeichenfolge mehr als 0 Zeichen enthält, in unserem Beispiel ergibt dies false.
Daher wird der Statement im guard-Anweisung ausgeführt print("Name ist nil oder eine leere Zeichenfolge. Kann nicht bearbeitet werden") ,sein Ausgabe-Name ist nil oder eine leere Zeichenfolge. Es kann im Konsolenfenster nicht bearbeitet werden und die Funktion wird mit return-Anweisung beendet.