Циклы в Swift: используем for-in, while, repeat-while

Циклы являются фундаментальной концепцией программирования. Вы можете повторить свой код с помощью цикла и сделать его более выразительным. В Swift для циклов мы можем использовать операторы for-in, while, repeat-while.

Использование цикла for

Синтаксис циклов в Swift достаточно прост:

for item in items {
    // Выполнить часть кода
}

Для цикла в Swift всегда используются ключевые слова for и in. Затем цикл for берет последовательность, как items в примере выше, и циклически проходит по каждому ее элементу. Каждый элемент последовательности доступен как константа item. Код, который повторяется, находится в скобках { }.

Вы можете прочитать приведенный выше пример кода как: Для каждого «элемента» в «последовательности» выполните следующий код.

Давайте посмотрим на пример:

for n in 1...5 {
    print(n)
}
 
// 1 2 3 4 5

В приведенном выше примере оператор используется закрытого диапазона для создания диапазона от 1 до 5, включая 5. Таким образом, вы можете повторять определенную функцию, например print(), ограниченное количество раз.

Использование цикла for-in с последовательностями

Мы уже рассматривали пример с оператором закрытого диапазона:

for n in 1...5 {
    print(n)
}
// 1 2 3 4 5

Закрытая последовательность принимает два параметра: нижнюю границу (первое число) и верхнюю границу (последнее число). Затем создается диапазон между этими двумя числами, включая последнее.

Также мы можем создать полузакрытую последовательность с оператором полузакрытого диапазона, который создает диапазон между верхней и нижней границами, но без учета верхней границы.

for i in 0..<5 {
    print(i)
}
// 0 1 2 3 4

Оператор диапазона полезен, когда вы имеете дело с массивами. Индекс последнего элемента массива всегда равен размеру массива минус один.

Вы можете использовать следующий код:

for i in 0..<items.count {
    // 
}

Или же равнозначный код:

for i in 0...items.count - 1 {
    // 
}

Использование цикла for-in с массивами

let names = ["Arthur", "Zaphod", "Trillian", "Ford", "Marvin"]
 
for name in names {
    print(name)
}
 
// Arthur
// Zaphod
// Trillian
// Ford
// Marvin

Еще один пример:

let numbers = [1, 2, 3, 4, 5, 6]
var sum = 0
 
for i in numbers {
    sum += i
}
 
print(sum)
// 21

Что если мы хотим создать функцию, которая возвращает сумму любого массива целых чисел?

func sum(_ numbers: [Int]) -> Int {
    var sum = 0
 
    for n in numbers {
        sum += n
    }
 
    return sum
}
 
let result = sum([23, 11, 9, 3, 24, 77])
print(result) 
// 147

Вы также можете использовать индекс массива для ссылки на определенный элемент.

for i in 0..<numbers.count {
    sum += numbers[i]
}

Для массива из 6 элементов мы выполняем итерацию от индекса 0 индексу 5 от начала до конца массива. Внутри цикла for мы используем синтаксис индекса, чтобы получить целое число из массива с помощью конструкции numbers[i].

Что если вы хотите получить доступ к индексу каждого элемента в массиве? Для данного случая у нас есть полезная функция enumerated().

let primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
 
for (n, prime) in primes.enumerated() {
    print("\(n) = \(prime)")
}
 
// 0 = 2
// 1 = 3
// 2 = 5
// 3 = 7
// 4 = 11
// 5 = 13
// 6 = 17
// 7 = 19
// 8 = 23
// 9 = 29
// 10 = 31

В приведенном выше коде мы определили массив целых чисел primes. В цикле for мы деконструируем индекс и значение элемента массива в кортеж (n, prime) c помощью функции enumerated().

Использование цикла for-in со словарями

Каким образом мы можем перебрать значения словаря?

let scores = ["Александр": 42, "Витя": 99, "Женя": 13]
 
for (name, score) in scores {
    print("\(name) набрал \(score) очков")
}
// Александр набрал 13 очков
// Витя набрал 42 очков
// Женя набрал 99 очков

В приведенном выше коде мы создали словарь scores с именами и количествов очков. Тип словаря [String: Int]. В цикле мы используем кортеж для получения пары ключ-значение. name соответствует ключу словаря, а score соответствует значению.

Использование циклов в практической разработке

В практической разработке приложений циклы могут полезны в следующих сценариях.

Если вы хотите применить один и тот же стиль к нескольким элементам одного типа, например, к кнопкам. Вы просто помещаете кнопки в массив, затем перебираете их с помощью цикла for и устанавливаете стили для каждой отдельной кнопки.

let buttons = [loginButton, signupButton, facebookButton]
 
for button in buttons {
    button.backgroundColor = UIColor.red
    button.layer.cornerRadius = 5.0
}

Вы можете перебрать массив чисел, например, для построения линейного графика.

let points = [0.1, 0.2, 0.3, 0.5, 0.7, 0.8]
 
for x in 0..<points.count {
    let y = points[x]
    graph.drawPoint(x, y)
}

Если вы хотите отправить уведомление каждому пользователю, например, в приложении для социальных сетей, вы можете использовать цикл for следующим образом:

for uid in user.followers {
    sendNotification(withUID: uid)
}

Цикл while

Цикл while повторяет код до тех пор, пока условие не становится false. Это полезно, когда вы хотите что-то повторить, но не знаете, какое количество раз. Условие всегда оценивается в начале цикла.

while(condition == true) {
    // Повторить следующий код
}

Цикл repeat-while

Цикл repeat-while похож на while за исключением того, что он оценивает условие в конце цикла. Поэтому данный цикл всегда выполняет хотя бы одну итерацию.

repeat {
    // Повторить следующий код
} while(condition == true)
Читайте также:
Добавить комментарий

Ваш адрес email не будет опубликован.