# 快速的 while 并重复 while 循环

> 原文： [https://www.programiz.com/swift-programming/repeat-while-loop](https://www.programiz.com/swift-programming/repeat-while-loop)

#### 在本文中，您将学习在 Swift 编程中创建 while 并重复... while 循环。

在上一篇文章中，我们了解了 [for-in 循环](/swift-programming/for-in-loop "Swift for-in loop")，用于在一定次数下运行一组任务。 在本文中，您将学习在未知迭代次数时使用`while`和`repeat..while`作为 for-in 循环的替代方法。

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

* * *

## 1\. Swift While 循环

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

while 循环的语法为：

```swift
while (TestExpression) {
    // statements
}
```

* * *

### while 循环如何工作？

`TestExpression`是布尔表达式。

如果将`TestExpression`评估为`true`，

*   while 循环内的语句被执行。
*   并再次评估`TestExpression`。

该过程一直进行到`TestExpression`评估为`false`为止。 如果`TestExpression`评估为`false`，则 while 循环终止。

* * *

### While 循环流程图

![Swift while loop flowchart](img/bf8ebb093c13c62cfa55610bdc163b19.png "Swift while loop flowchart")

* * *

### 示例 1：While 循环

```swift
var currentLevel:Int = 0, finalLevel:Int = 5
let gameCompleted = true
while (currentLevel <= finalLevel) {
    //play game
    if gameCompleted {
        print("You have passed level \(currentLevel)")
        currentLevel += 1
    }
}
print("outside of while loop")
```

运行该程序时，输出为：

```swift
You have passed level 0
You have passed level 1
You have passed level 2
You have passed level 3
You have passed level 4
You have passed level 5
outside of while loop 
```

在上述程序中，变量 `currentLevel` 和 `finalLevel` 初始化为 0，常量 `gameCompleted` 初始化为`true`。

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

<caption>Execution steps</caption>
| 迭代 | 条件（currentLevel < = finalLevel） | 输出量 |
| --- | --- | --- |
| 1 | 0 < = 5（真） | **您已通过 0 级** |
| 2 | 1 < = 5（真） | **您已通过 1 级** |
| 3 | 2 < = 5（真） | **您已经通过了 2 级** |
| 4 | 3 < = 5（真） | **您已通过 3 级** |
| 5 | 4 < = 5（真） | **您已通过 4 级** |
| 6 | 5 < = 5（真） | **您已通过 5 级** |
| 7 | 6 < = 5（假） | while 循环之外的 |

* * *

## 2.循环时重复

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

repeat..while 循环的语法为：

```swift
repeat {
    // statements
    ...
} while (testExpression)
```

* * *

### 重复... while 循环如何工作？

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

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

当 `testExpression` 为`false`时，repeat..while 循环终止。

* * *

### 重复... while 循环的流程图

![Swift repeat..while loop flowchart](img/8196f58c6f075e2d0ea80b8f6e9ad8f2.png "Swift repeat..while loop flowchart")

* * *

### 示例 2：在 while 循环中重复

```swift
var currentLevel:Int = 0, finalLevel:Int = 5
let gameCompleted = true
repeat {
    //play game
    if gameCompleted {
        print("You have passed level \(currentLevel)")
        currentLevel += 1
    }
} while (currentLevel <= finalLevel)
print("outside of repeat while loop") 
```

When you run the program, the output will be:

```swift
You have passed level 0
You have passed level 1
You have passed level 2
You have passed level 3
You have passed level 4
You have passed level 5
outside of repeat while loop 
```

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

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

<caption>Execution steps</caption>
| Iteration | Condition (currentLevel <= finalLevel) | Output |
| --- | --- | --- |
| 1 | 0 <= 5 (true) | **You have passed level 0** |
| 2 | 1 <= 5 (true) | **You have passed level 1** |
| 3 | 2 <= 5 (true) | **You have passed level 2** |
| 4 | 3 <= 5 (true) | **You have passed level 3** |
| 5 | 4 <= 5 (true) | **You have passed level 4** |
| 6 | 5 <= 5 (true) | **You have passed level 5** |
| 7 | 6 <= 5 (false) | **在循环 while 循环**之外 |

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

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

* * *

## 3.无限循环

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

### 示例 3：无限 while 循环

```swift
while (true) {
   print("Hello, World!")
}
```

```swift
repeat {
   print("Hello, World!")

} while (true)
```

When you run the program, the output will be:

```swift
Hello, World!
Hello, World!
.
.
.
```

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