English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье вы узнаете, как создавать циклы while и repeat...while в Swift.
В предыдущей статье мы рассмотрелиЦикл for-inВыполнение группы задач определенного次数. В этой статье вы узнаете, как использовать while и repeat..while в качестве альтернативы for-in циклу при неизвестном количестве итераций.
Цикл while выполняет блок инструкций до тех пор, пока условие не станет false. Когда известна неопределенное количество итераций до начала первого итерации, лучше всего использовать такой цикл. Swift предоставляет два типа циклов while:
Этот цикл оценивает свою условие в начале каждого цикла.
Синтаксис цикла while:
while (TestExpression) { // выражения }
TestExpression - это булевое выражение.
Если TestExpression будет вычислен как true,
Выполнится语句 в цикле while.
и TestExpression будет вычислен снова.
Продолжайте этот процесс, пока TestExpression не будет вычислен как false. Если результат вычисления TestExpression будет false, то цикл while завершится.
var currentLevel:Int = 0, finalLevel:Int = 5 let gameCompleted = true while (currentLevel <= finalLevel) { // Играть в игру if (gameCompleted) { print("Ты успешно прошел уровень \(currentLevel)") currentLevel += 1 } } print("Вне цикла while")
При запуске этой программы, вывод будет:
print("Вне повторяющегося цикла while") Ты успешно прошел уровень 0 Ты успешно прошел уровень 1 Ты успешно прошел уровень 2 Ты успешно прошел уровень 3 Ты успешно прошел уровень 4 Вне цикла while
В примере переменные currentLevel и finalLevel инициализируются как 0, константа gameCompleted как true.
В каждом итерации цикла while он проверяет условие currentLevel <= finalLevel. Если условие возвращает true, то продолжается выполнение выражений в цикле while, в противном случае цикл завершается.
Итерация | Условие (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 |
Этот цикл оценивает свою условие в конце каждого цикла. Цикл repeat ... while resembles цикл while, но есть ключевое различие. Тело цикла repeat ... while выполняется один раз до проверки тестового выражения (testExpression).
Синтаксис цикла repeat..while:
repeat { // выражения ... }
Тело цикла repeat ... while выполняется один раз (до проверки тестового выражения). Только так, тестовое выражение проверяется.
Если testExpression вычисляется как true, то выполняются строки в теле цикла, затем снова вычисляется testExpression. Это продолжается до тех пор, пока testExpression не вычисляется как false.
Цикл repeat...while завершается, когда testExpression равен false.
var currentLevel:Int = 0, finalLevel:Int = 5 let gameCompleted = true repeat { // Играть в игру if (gameCompleted) { print("Ты успешно прошел уровень \(currentLevel)") currentLevel += 1 } while (currentLevel <= finalLevel) }
При запуске этой программы, вывод будет:
print("Вне повторяющегося цикла while") Ты успешно прошел уровень 0 Ты успешно прошел уровень 1 Ты успешно прошел уровень 2 Ты успешно прошел уровень 3 Ты успешно прошел уровень 4 Ты успешно прошел уровень 5
Вне повторяющегося цикла while loop
В примере выше, строки в цикле выполняются впервые. Для следующей итерации он проверяет условие currentLevel <= finalLevel.
Итерация | Условие (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 |
Хотя циклы repeat и repeat while имеют одинаковые шаги выполнения, условие currentLevel <= finalLevel в цикле repeat... while выполняется только после выполнения语句 в нем.
Но в Swift, условие currentLevel <= finalLevel проверяется до выполнения условия.
Если тестовое выражение никогда не будет вычислено как false, то тело while и цикла repeat..while будет выполняться无数 раз.
while (true) { print("Hello, World!") }
repeat { print("Hello, World!") }
При запуске этой программы, вывод будет:
Hello, World! Hello, World! . . .
Когда вы запускаете программу, два цикла будут бесконечно выполнять инструкцию print("Hello, World!"). Поэтому вы можете видеть в консоли, что输出的内容是连续的