Циклы


Цикл 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, которое не удовлетворяет условию проверки, просто пропустит это число и перейдет к следующему элементу последовательности.