Swift guard 语句

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

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


guard 语句的语法

guard 语句的语法是:

guard expression else {
  // statements
  // control statement: return, break, continue or throw.
}

这里,expression 返回 truefalse。如果表达式评估为

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

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


Swift guard 语句的工作原理

How guard statement works in Swift
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 中将控制转移到循环的下一次迭代。

注意:诸如 continuebreak 等控制语句的使用是强制性的。否则,我们会收到错误:'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

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战