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