在 Swift 中,我们使用 guard
语句,当某些条件不满足时,将程序控制转移出作用域。
guard
语句类似于 if
语句,但有一个主要区别。if
语句在满足特定条件时运行。然而,guard
语句在不满足特定条件时运行。
guard 语句的语法
guard
语句的语法是:
guard expression else {
// statements
// control statement: return, break, continue or throw.
}
这里,expression
返回 true
或 false
。如果表达式评估为
true
-guard
代码块内的语句不执行false
-guard
代码块内的语句执行
注意:我们必须使用 return
、break
、continue
或 throw
来退出 guard 作用域。
Swift guard 语句的工作原理

示例:Swift 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
是
- 奇数 - ,
i % 2== 0
的计算结果为false
。然后,guard
内的代码将被执行。 - 偶数 - ,
i % 2 == 0
的计算结果为true
。然后,guard
内的代码将被跳过。
因此,我们只得到偶数作为输出。
我们使用 continue 语句 在 guard
中将控制转移到循环的下一次迭代。
注意:诸如 continue
、break
等控制语句的使用是强制性的。否则,我们会收到错误:'guard' body must not fall through, consider using a 'continue' or 'return' to exit the scope
。
函数内的 guard 语句
guard
语句通常与函数一起使用。函数是执行特定任务的代码块。要了解更多信息,请访问 Swift Function。
让我们看看如何将 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 % 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
语句内的代码被跳过,函数内的其他代码将被执行。因此,我们得到 Even Number
作为输出。
带有多重条件的 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
时,guard
条件才为 true
。
guard-let 语句
在处理 Swift Optionals 时,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
。