Swift中的guard语句
- guard 语句基础:Swift 中的
guard
语句用于在条件不满足时提前退出函数或循环。 - 语法和使用:
guard
语句需配合return
、break
、continue
或throw
使用,确保在条件不满足时退出作用域。 - guard 与 if 对比:与
if
语句相比,guard
专注于不满足条件时的执行路径,提高代码可读性和安全性。
在 Swift 中,我们使用 guard
语句在某些条件不满足时将程序控制权转出作用域。
guard
语句与 if
语句类似,但有一个主要区别。if
语句在满足某个条件时运行。然而,guard
语句在不满足某个条件时运行。
guard 语句的语法
guard
语句的语法是:
guard expression else {
// 语句
// 控制语句:return, break, continue 或 throw.
}
这里,expression
返回 true
或 false
。如果表达式计算结果为
true
-guard
代码块内的语句不会被执行false
-guard
代码块内的语句会被执行
注意:我们必须使用 return
、break
、continue
或 throw
从 guard 作用域中退出。
Swift guard 语句的工作原理
示例:Swift Guard 语句
var i = 2
while (i <= 10) {
// guard 条件检查是否为偶数
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
是
- 奇数 -
i % 2 == 0
计算结果为false
。那么,guard
内的代码会被执行。 - 偶数 -
i % 2 == 0
计算结果为true
。那么,guard
内的代码会被跳过。
因此,我们的输出只有偶数。
我们在 guard
内使用了 continue 语句 来将控制权传递给循环的下一次迭代。
注意:必须使用像 continue
、break
等控制语句。否则,我们将得到错误:'guard' body must not fall through, consider using a 'continue' or 'return' to exit the scope
('guard' 主体不能跌落,考虑使用 'continue' 或 'return' 退出作用域)。
在函数内使用 guard 语句
guard
语句通常与函数一起使用。函数是执行特定任务的代码块。要了解更多,请访问 Swift 函数。
让我们看看如何在函数中使用 guard
语句。
// 创建一个函数
func checkOddEven() {
var number = 23
// 使用 guard 语句
guard number % 2 == 0 else {
print("奇数")
return
}
print("偶数")
}
// 函数调用
checkOddEven()
输出
奇数
在上述示例中,我们创建了一个名为 checkOddEven()
的函数。注意函数内 guard
语句的使用。
guard number % 2 == 0 else {
print("奇数")
return
}
这里,guard
语句检查数字是偶数还是奇数。由于 number
是奇数,条件 number % 2 == 0
返回 false
。
因此,guard
语句内的代码被执行。
现在,让我们将 number
的值更改为一个偶数,比如 24
。
// 创建一个函数
func checkOddEven() {
var number = 24
// 使用 guard 语句
guard number % 2 == 0 else {
print("奇数")
return
}
print("偶数")
}
// 函数调用
checkOddEven()
输出
偶数
在这里,由于 number
是偶数,条件 number % 2 == 0
的计算结果为 true
。
所以,guard
语句内的代码被跳过,函数内的其他代码被执行。因此,我们得到了 偶数
作为输出。
包含多个条件的 guard 语句
guard
语句也可以通过 逗号 (,) 连接多个条件,如下所示:
func checkJobEligibility() {
var age = 33
guard age >= 18, age <= 40 else {
print("不符合工作资格")
return
}
print("您符合这份工作的资格")
}
checkJobEligibility()
输出
您符合这份工作的资格
在上面的例子中,guard
语句包含了用逗号分隔的两个条件。
这里,两个条件之间将有逻辑与关系。也就是说,只有当两个条件都为 true
时,guard
条件才为 true
。
guard-let 语句
在处理 Swift 可选值时,guard
语句被用作 guard-let
语句。例如,
func checkAge() {
var age: Int? = 22
guard let myAge = age else {
print("年龄未定义")
return
}
print("我的年龄是 \(myAge)")
}
checkAge()
输出
我的年龄是 22
在上面的例子中,我们创建了一个名为 age
的可选变量。这里,我们使用 guard-let
语句来检查 age
是否包含值。
由于 age
包含了某个值,所以 guard-let
块内的代码不会被执行。这与 guard
条件为 true
的情况类似。
guard 与 if 语句的对比
guard
语句被引入作为 if
语句的替代。例如,
假设我们想检查一个人是否有资格投票,我们可以使用 if
语句:
func voteEligibility() {
var age = 42
if age >= 18 {
print("有资格投票")
}
else {
print("没有资格投票")
}
}
voteEligibility()
输出
有资格投票
同样的程序可以使用 guard
语句编写:
func voteEligibility() {
var age = 42
guard age >= 18 else {
print("没有资格投票")
return
}
print("有资格投票")
}
voteEligibility()
输出
有资格投票
如你所见,使用 guard
语句,我们可以在条件计算结果为 false
时立即退出函数。