原文: https://www.programiz.com/swift-programming/repeat-while-loop

在本文中,您将学习在 Swift 编程中创建whilerepeat..while循环。

在上一篇文章中,我们了解了for-in循环,用于在一定次数下运行一组任务。 在本文中,您将学习在未知迭代次数时使用whilerepeat..while作为for-in循环的替代方法。

while循环执行一组语句,直到条件变为false为止。 当第一次迭代开始之前未知迭代次数时,最好使用此类循环。 Swift 提供了两种while循环:


1. Swift While循环

该循环在每次通过循环的开始时求值其条件。

while循环的语法为:

  1. while (TestExpression) {
  2. // statements
  3. }

while循环如何工作?

TestExpression是布尔表达式。

如果将TestExpression求值为true

  • while循环内的语句被执行。
  • 并再次求值TestExpression

该过程一直进行到TestExpression求值为false为止。 如果TestExpression求值为false,则while循环终止。


While循环流程图

Swift `while`和`repeat...while`循环 - 图1


示例 1:While循环

  1. var currentLevel:Int = 0, finalLevel:Int = 5
  2. let gameCompleted = true
  3. while (currentLevel <= finalLevel) {
  4. //play game
  5. if gameCompleted {
  6. print("You have passed level \(currentLevel)")
  7. currentLevel += 1
  8. }
  9. }
  10. print("outside of while loop")

运行该程序时,输出为:

  1. You have passed level 0
  2. You have passed level 1
  3. You have passed level 2
  4. You have passed level 3
  5. You have passed level 4
  6. You have passed level 5
  7. outside of while loop

在上述程序中,变量currentLevelfinalLevel初始化为 0,常量gameCompleted初始化为true

while循环的每次迭代中,它都会检查条件currentLevel <= finalLevel。 如果条件返回true,则执行while循环内的语句,否则循环终止。

执行步骤

迭代 条件(currentLevel <= finalLevel 输出
1 0 <= 5(真) You have passed level 0
2 1 <= 5(真) You have passed level 1
3 2 <= 5(真) You have passed level 2
4 3 <= 5(真) You have passed level 3
5 4 <= 5(真) You have passed level 4
6 5 <= 5(真) You have passed level 5
7 6 <= 5(假) outside of while loop

2.repeat...while循环

该循环在每次循环结束时求值其条件。repeat...while循环类似于while循环,但有一个关键区别。 在检查测试表达式之前,执行一次repeat ... while循环主体。

repeat..while循环的语法为:

  1. repeat {
  2. // statements
  3. ...
  4. } while (testExpression)

repeat...while循环如何工作?

repeat...while循环的主体执行一次(在检查测试表达式之前)。 只有这样,才检查testExpression

如果将testExpression求值为true,则执行循环体内的语句,然后再次求值testExpression。 该过程一直进行到testExpression求值为false为止。

testExpressionfalse时,repeat..while循环终止。


repeat...while循环的流程图

Swift `while`和`repeat...while`循环 - 图2


示例 2:repeat...while循环

  1. var currentLevel:Int = 0, finalLevel:Int = 5
  2. let gameCompleted = true
  3. repeat {
  4. //play game
  5. if gameCompleted {
  6. print("You have passed level \(currentLevel)")
  7. currentLevel += 1
  8. }
  9. } while (currentLevel <= finalLevel)
  10. print("outside of repeat while loop")

运行该程序时,输出为:

  1. You have passed level 0
  2. You have passed level 1
  3. You have passed level 2
  4. You have passed level 3
  5. You have passed level 4
  6. You have passed level 5
  7. outside of repeat while loop

在上面的示例中,循环内的语句首次执行。 对于下一次迭代,它将检查条件currentLevel <= finalLevel

如果条件返回true,则执行while循环内的语句,否则循环终止。

执行步骤

迭代 条件(currentLevel <= finalLevel 输出
1 0 <= 5true You have passed level 0
2 1 <= 5true You have passed level 1
3 2 <= 5true You have passed level 2
4 3 <= 5true You have passed level 3
5 4 <= 5true You have passed level 4
6 5 <= 5true You have passed level 5
7 6 <= 5false outside of repeat while loop

尽管whilerepeat while循环具有相同的执行步骤,但是repeat while循环上的条件currentLevel <= finalLevel仅在执行其中的语句之后才执行。

但是在while中,条件是在开始时检查的,然后在其中执行语句。


3.无限循环

如果测试表达式的取值从未为false,则whilerepeat..while循环的主体将执行无数次。

示例 3:无限while循环

  1. while (true) {
  2. print("Hello, World!")
  3. }
  1. repeat {
  2. print("Hello, World!")
  3. } while (true)

运行该程序时,输出为:

  1. Hello, World!
  2. Hello, World!
  3. .
  4. .
  5. .

当您运行程序时,两个循环都将无限次执行print("Hello, World!")语句。 因此,您可以看到连续输出您好,世界! 控制台中的。