Swift guard 语句
在本教程中,我们将学习如何使用 guard 语句来控制程序的执行流程。
在 Swift 中,当不满足某些条件时,我们使用 guard 语句将程序控制转移到范围之外。
guard 语句与 if 语句类似,但有一个主要区别。if 语句在满足某个条件时运行。但是,当不满足某个条件时,guard 语句将运行。
guard 语句的语法
guard 语句的语法为:
guard expression else {// statements// control statement: return, break, continue or throw.}
这里,表达式返回 true 或 false。如果表达式的计算结果为:
- true - 不执行
guard代码块内的语句 - false - 执行
guard代码块内的语句
return、break、continue 或 throw 退出 guard 的范围。guard 语句流程图

实例
var i = 2while (i <= 10) {// guard condition to check the even numberguard i % 2 == 0 else {i = i + 1continue}print(i)i = i + 1}
结果为:
246810
在上面的实例中,我们使用了 guard 语句来检查数字是偶数还是奇数。注意这一行,
guard i % 2 == 0 else {...}
在这里,如果:
- 奇数 -,
i%2==0的计算结果为 false。并且,执行保护内部的代码。 - 偶数 -,
i%2==0的计算结果为 true。并且,跳过保护内部的代码。
因此,我们得到的结果都是偶数。
我们使用了 guard 中的 continue 语句 将控制转移到循环的下一次迭代。
continue、break 等控制语句。否则,产生一个错误:'guard' body must not fall through, consider using a 'continue' or 'return' to exit the scope函数内部的 guard 语句
guard 语句通常与函数一起使用。函数是执行特定任务的代码块。要了解更多信息,请访问Swift 函数。
让我们看看如何使用函数的 guard 语句。
// create a functionfunc checkOddEven() {var number = 23// use of guard statementguard number % 2 == 0 else {print("Odd Number")return}print("Even Number")}// function callcheckOddEven()
结果如下:
Odd Number
在上面的实例中,我们创建了一个名为 checkOddEven() 的函数。注意函数中使用了 guard 语句。
guard number % 2 == 0 else {print("Odd Number")return}
这里,guard 语句判断 number 是偶数还是奇数。由于 number是奇数,条件 number%2==0 返回 false。
因此,执行 guard 语句中的代码。
现在,让我们将 number 的值改为偶数,比如 24。
// create a functionfunc checkOddEven() {var number = 24// use of guard statementguard number % 2 == 0 else {print("Odd Number")return}print("Even Number")}// function callcheckOddEven()
结果如下:
Even Number
在这里,由于 number 是偶数,条件 number%2==0 的计算结果为 true。
因此,将跳过 guard 语句中的代码,并执行函数中的其他代码。因此,我们得到偶数作为输出。
多条件使用 guard
guard 语句还可以使用多个条件,以逗号(,)分隔,如下所示:
func checkJobEligibility() {var age = 33guard age >= 18, age <= 40 else {print("Not Eligible for Job")return}print("You are eligible for this job")}checkJobEligibility()
结果如下:
You are eligible for this job
在上面的实例中,guard 语句包含两个以逗号分隔的条件。
这里,两个条件之间存在逻辑与关系。也就是说,只有当两个条件都为 true 时,保护条件才为 true。
guard-let 语句
在使用 Swift 可选类型 时,guard 语句用作 guard-let 语句。例如:
func checkAge() {var age: Int? = 22guard let myAge = age else {print("Age is undefined")return}print("My age is \(myAge)")}checkAge()
结果如下:
My age is 22
在上面的实例中,我们创建了一个名为 age 的可选变量。这里,我们使用 guard-let 语句检查 age 是否包含值。
由于 age 包含一些值,因此不执行 guard-let 块内的代码。这类似于 guard 为 true 的情况。
guard 与 if 语句对比
guard 语句是作为 if 语句的替代语句引入的。例如
假设我们想检查一个人是否有资格投票,我们可以使用 if 语句,
func voteEligibility() {var age = 42if age >= 18 {print("Eligible to vote")}else {print("Not eligible to vote")}}voteEligibility()
结果为:
Eligible to vote
可以使用 guard 语句编写相同的程序,如下所示:
func voteEligibility() {var age = 42guard age >= 18 else {print("Not Eligible to vote")return}print("Eligible to vote")}voteEligibility()
结果如下:
Eligible to vote
正如您所看到的,使用 guard 语句,只要条件求值为 false,我们就可以退出函数。