С помощью цикла for-in мы можем перебрать элементы коллекции (массивы, множества, словари) или последовательности. Он имеет следующую форму:
for объект_последовательности in последовательность { // действия }
Например, переберем элементы массива:
for item in 1...5 { print(item) }
Выражение 1...5
образует последовательность из пяти чисел от 1 до 5. И цикл проходит по всем
элементам последовательности. При каждом проходе он извлекает одно число и передает его в переменную item. Таким образом,
цикл сработает пять раз.
С помощью оператора where можно задавать условия выборки из последовательности элементов:
for i in 0...10 where i % 2 == 0 { print(i) // 0, 2, 4, 6, 8, 10 }
Здесь из последовательности 0...10
извлекаются только те элементы, которые соответствуют условию после оператора
where - i % 2 == 0
, то есть четные числа.
Оператор while
проверяет некоторое условие, и если оно возвращает true, то выполняет блок кода. Этот цикл имеет следующую форму:
while условие { // действия }
Например:
var i = 10 while i > 0 { print(i) i-=1 }
При этом надо внимательно подходить к условию. Если оно всегда будет возвращать true, то мы получим бесконечный цикл, и приложение может зависнуть.
Цикл repeat-while
сначала выполняет один раз цикл, и если некоторое условие возвращает true, то продолжает выполнение цикла. Он имеет
следующую форму:
repeat { // действия } while условие
Например, перепишем предыдущий цикл while
:
var i = 10 repeat { print(i) i-=1 } while i > 0
Здесь цикл также выполнится 10 раз, пока значение переменной i не станет равно 0.
Но рассмотрим другую ситуацию:
var i = -1 repeat { print(i) i-=1 } while i > 0
Несмотря на то, что переменная i меньше 0, но цикл выполнится один раз.
Иногда возникает ситуация, когда требуется выйти из цикла, не дожидаясь его завершения. В этом случае мы можем воспользоваться оператором break.
for i in 0...10 { if i == 5{ break } print(i) // 0, 1, 2, 3, 4 }
Поскольку в цикле идет проверка, равно ли значение переменной i числу 5, то когда перебор дойдет до числа 5, сработает оператор break, и цикл завершится.
Теперь поставим себе другую задачу. А что если мы хотим, чтобы при проверке цикл не завершался, а просто переходил к следующему элементу. Для этого мы можем воспользоваться оператором continue:
for i in 0...10 { if i == 5{ continue } print(i) // 0, 1, 2, 3, 4, 6, 7, 8,, 9, 10 }
В этом случае цикл, когда дойдет до числа 5, которое не удовлетворяет условию проверки, просто пропустит это число и перейдет к следующему элементу последовательности.