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 = 2
while (i <= 10) {
// guard condition to check the even number
guard i % 2 == 0 else {
i = i + 1
continue
}
print(i)
i = i + 1
}
结果为:
2
4
6
8
10
在上面的实例中,我们使用了 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 function
func checkOddEven() {
var number = 23
// use of guard statement
guard number % 2 == 0 else {
print("Odd Number")
return
}
print("Even Number")
}
// function call
checkOddEven()
结果如下:
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 function
func checkOddEven() {
var number = 24
// use of guard statement
guard number % 2 == 0 else {
print("Odd Number")
return
}
print("Even Number")
}
// function call
checkOddEven()
结果如下:
Even Number
在这里,由于 number
是偶数,条件 number%2==0
的计算结果为 true。
因此,将跳过 guard
语句中的代码,并执行函数中的其他代码。因此,我们得到偶数作为输出。
多条件使用 guard
guard
语句还可以使用多个条件,以逗号(,
)分隔,如下所示:
func checkJobEligibility() {
var age = 33
guard 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? = 22
guard 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 = 42
if age >= 18 {
print("Eligible to vote")
}
else {
print("Not eligible to vote")
}
}
voteEligibility()
结果为:
Eligible to vote
可以使用 guard
语句编写相同的程序,如下所示:
func voteEligibility() {
var age = 42
guard age >= 18 else {
print("Not Eligible to vote")
return
}
print("Eligible to vote")
}
voteEligibility()
结果如下:
Eligible to vote
正如您所看到的,使用 guard
语句,只要条件求值为 false,我们就可以退出函数。