跳到主要内容

Swift中的guard语句

提示
  1. guard 语句基础:Swift 中的 guard 语句用于在条件不满足时提前退出函数或循环。
  2. 语法和使用guard 语句需配合 returnbreakcontinuethrow 使用,确保在条件不满足时退出作用域。
  3. guard 与 if 对比:与 if 语句相比,guard 专注于不满足条件时的执行路径,提高代码可读性和安全性。

在 Swift 中,我们使用 guard 语句在某些条件不满足时将程序控制权转出作用域。

guard 语句与 if 语句类似,但有一个主要区别。if 语句在满足某个条件时运行。然而,guard 语句在不满足某个条件时运行。

guard 语句的语法

guard 语句的语法是:

guard expression else {
// 语句
// 控制语句:return, break, continue 或 throw.
}

这里,expression 返回 truefalse。如果表达式计算结果为

  • true - guard 代码块内的语句不会被执行
  • false - guard 代码块内的语句会被执行

注意:我们必须使用 returnbreakcontinuethrow 从 guard 作用域中退出。

Swift guard 语句的工作原理

guard 语句在 Swift 中的工作原理

示例: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 语句 来将控制权传递给循环的下一次迭代。

注意:必须使用像 continuebreak 等控制语句。否则,我们将得到错误:'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 时立即退出函数。