swift guard语句 – Swift最新教程

上一章Swift教程请查看:swift continue语句
在本文中,你将学习使用guard语句来控制程序执行的流程。
Swift If语句描述了如何根据特定条件(布尔值)执行操作,在本文中,我们将探讨guard语句相对于if语句的好处,以控制程序流并编写更简单、更干净的代码。
Swift guard语句guard语句的主要用途是在一定条件下将程序控制转移到范围之外。这些语句类似于if语句,后者根据特定条件(布尔值)执行语句,但与if不同,guard语句仅在不满足特定条件时才运行。
而且,guard内的语句必须退出范围,因此,我们必须在guard语句结束时返回、中断、继续或抛出用户程序控制语句。
guard语句的语法

guard expression else { //statements //必须包含的语句:return, break, continue or throw. }

  • 在这里,表达式是一个布尔表达式(返回true或false)。
  • 如果表达式被赋值为false,则执行guard代码块中的语句。
  • 如果表达式求值为true,则跳过guard代码块中的语句。
guard语句如何工作?
swift guard语句 – Swift最新教程

文章图片
注意:guard语句的结尾必须包含一个控制语句return、break、continue或throw。
例1:guard语句如何工作?
一个简单有效的guard语句如下:
guard true else { print("not met") } print("met")

在上面的程序中,guard包含一个布尔值true(满足条件),因为,guard语句只在条件不满足时运行,所以不会执行guard内部的语句。
示例2:guard语句必须退出作用域
guard false else { print("not met") } print("met")

在上面的程序中,保护条件的计算结果为false,因此else中的print语句应该执行。但你会得到一个错误:‘ guard’ body may not fall through, consider using a ‘ return’ or ‘ throw’ to exit the scope.
简单单词中的错误消息意味着,你需要使用return、break、continue或throw语句将程序控制从保护语句中转移出来。现在我们使用return,于return语句只能在函数内部使用,我们将在Swift函数中封装上面的代码。
例3:函数中的guard语句
我们可以在Swift函数中使用guard语句:
func someFunction() { guard false else { print("not met") return } print("met") } someFunction() print("after function call")

在上面的程序中,保护条件的计算结果为false,因此执行保护内的语句,一个语句print在控制台中输出not met。
语句返回终止了函数的执行,并在函数调用执行后打印语句,在控制台中输出函数调用后的。
例4:使用optional可选类型和guard
我们已经看到在快速选项中使用if-let来打开可选选项,但是,我们也可以使用guard语句来代替if-let来展开一个具有一个优点的可选语句,用guard而不是if-let来解包一个可选变量的主要好处是可以增加解包变量的作用域。
让我们看看下面的例子:
func changeOptionalStringToUpperCase() { var name:String? guard let temp = name else { print("Name is nil. Cannot process") return } print("Uppercased:\(temp.uppercased())") } changeOptionalStringToUpperCase()

在上面的程序中,你可以看到未包装的值temp正在guard语句定义的范围之外使用。由于name是可选的,并且包含nil值,所以guard语句无法打开该值。
Guard else中的语句执行它输出的是Name is nil. Cannot process,无法处理输出并使用return语句终止函数,上述guard语句if-else语句的等价代码为:
func changeOptionalStringToUpperCase() {var name:String? if let temp = name { print("Uppercased:\(temp.uppercased())") } else { print("Name is nil. Cannot process") return } // 使用Guard } changeOptionalStringToUpperCase()

请注意,上面两个语句都是有效的,并且作用相同。但是使用if-let语句时,你不能在if-let语句之外使用未包装的值。但是使用guard语句,你可以通过函数使用未包装的值。
例5:具有多个条件的guard语句
Guard语句也可以将多个条件用逗号(,)分隔,比如:
func changeOptionalStringToUpperCase() { var name:String? = "" guard let temp = name , temp.count > 0else { print("Name is nil or an empty string. Cannot process") return } print("Uppercased:\(temp.uppercased())") } changeOptionalStringToUpperCase()

在上面的程序中,guard语句包含两个由逗号分隔的条件。
在我们的例子中,第一个条件让temp = name打开一个返回true的可选条件,第二个条件temp.count > 0检查打开的字符串是否有超过0个字符,在我们的例子中,该字符串的计算结果为false。
【swift guard语句 – Swift最新教程】因此,guard语句中的语句执行print语句(“Name is nil or an empty string. Cannot process”),它的输出名称为空或空字符串,无法在控制台中处理,并使用return语句终止函数。

    推荐阅读