English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift базовый курс

Операторы Swift

Swift управление потоком

Swift коллекции

Swift функции

Swift 高级

Циклы while и repeat...while в Swift

В этой статье вы узнаете, как создавать циклы while и repeat...while в Swift.

В предыдущей статье мы рассмотрелиЦикл for-inВыполнение группы задач определенного次数. В этой статье вы узнаете, как использовать while и repeat..while в качестве альтернативы for-in циклу при неизвестном количестве итераций.

Цикл while выполняет блок инструкций до тех пор, пока условие не станет false. Когда известна неопределенное количество итераций до начала первого итерации, лучше всего использовать такой цикл. Swift предоставляет два типа циклов while:

1. Цикл while в Swift

Этот цикл оценивает свою условие в начале каждого цикла.

Синтаксис цикла while:

while (TestExpression) {
    // выражения
}

Как работает цикл while?

TestExpression - это булевое выражение.

Если TestExpression будет вычислен как true,

  • Выполнится语句 в цикле while.

  • и TestExpression будет вычислен снова.

Продолжайте этот процесс, пока TestExpression не будет вычислен как false. Если результат вычисления TestExpression будет false, то цикл while завершится.

Діаграмма процесса цикла while

Пример 1: Цикл 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, в противном случае цикл завершается.

Если условие возвращает true, то выполняются строки в цикле while, в противном случае цикл завершается.
ИтерацияУсловие (currentLevel <= finalLevel)Вывод
10 <= 5 (истина)Ты успешно прошел уровень 0
21 <= 5 (истина)Ты успешно прошел уровень 1
32 <= 5 (истина)Ты успешно прошел уровень 2
43 <= 5 (истина)Ты успешно прошел уровень 3
54 <= 5 (истина)Ты успешно прошел уровень 4
65 <= 5 (истина)Ты успешно прошли уровень 5
76 <= 5 (ложно)Вне цикла while

2. Повторяющийся цикл while

Этот цикл оценивает свою условие в конце каждого цикла. Цикл repeat ... while resembles цикл while, но есть ключевое различие. Тело цикла repeat ... while выполняется один раз до проверки тестового выражения (testExpression).

Синтаксис цикла repeat..while:

repeat {
    // выражения
    ...
}

Как работает цикл repeat ... while?

Тело цикла repeat ... while выполняется один раз (до проверки тестового выражения). Только так, тестовое выражение проверяется.

Если testExpression вычисляется как true, то выполняются строки в теле цикла, затем снова вычисляется testExpression. Это продолжается до тех пор, пока testExpression не вычисляется как false.

Цикл repeat...while завершается, когда testExpression равен false.

Диаграмма процесса цикла repeat ... while

Пример 2: цикл repeat ... while

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.

Если условие возвращает true, то выполняются строки в цикле while, в противном случае цикл завершается.
ИтерацияУсловие (currentLevel <= finalLevel)Вывод
10 <= 5 (истина)Ты успешно прошел уровень 0
21 <= 5 (истина)Ты успешно прошел уровень 1
32 <= 5 (истина)Ты успешно прошел уровень 2
43 <= 5 (истина)Ты успешно прошел уровень 3
54 <= 5 (истина)Ты успешно прошел уровень 4
65 <= 5 (истина)Ты успешно прошли уровень 5
76 <= 5 (ложно)

Вне повторяющегося цикла while

Хотя циклы repeat и repeat while имеют одинаковые шаги выполнения, условие currentLevel <= finalLevel в цикле repeat... while выполняется только после выполнения语句 в нем.

Но в Swift, условие currentLevel <= finalLevel проверяется до выполнения условия.

3. Бесконечный цикл while

Если тестовое выражение никогда не будет вычислено как false, то тело while и цикла repeat..while будет выполняться无数 раз.

Пример 3: Бесконечный цикл while

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

 

repeat {
   print("Hello, World!")
}

При запуске этой программы, вывод будет:

Hello, World!
Hello, World!
.
.
.

Когда вы запускаете программу, два цикла будут бесконечно выполнять инструкцию print("Hello, World!"). Поэтому вы можете видеть в консоли, что输出的内容是连续的"Hello, World!".