Перейти к содержанию
Educora
Начальный16 мин3 / 14

Условия и циклы

Научи программу принимать решения с помощью `if` и `switch` и повторять действия с помощью `for-in`, диапазонов и `while`.

Проверь себя
В этом уроке ты узнаешь
  • Писать условия с if, else if, else и логическими операторами
  • Проверять значения, диапазоны и шаблоны с помощью switch
  • Использовать циклы for-in, while и repeat-while вместе с диапазонами

Телефон сам приглушает экран, когда становится темно, а будильник звонит каждое утро в одно и то же время. В первом случае программа принимает решение, во втором — повторяет действие. Эти два умения лежат в основе любой программы, и в этом уроке ты научишься записывать их на Swift.

Решения с помощью `if`

if проверяет условие: если оно равно true, выполняется код в фигурных скобках. else if добавляет следующее условие, а else описывает случай, когда ни одно не выполнилось. В Swift условие не нужно брать в круглые скобки, но фигурные скобки { } обязательны всегда.

Swift
let temperature = 28

if temperature > 30 {
    print("Very hot")
} else if temperature > 20 {
    print("Warm")
} else {
    print("Cool")
}
Ожидаемый результат
Warm

В условиях используют операторы сравнения: == (равно), != (не равно), <, >, <=, >=. Чтобы объединить несколько условий, есть логические операторы: && (и), || (или), ! (не).

Swift
let age = 15
let hasTicket = true

if age >= 12 && hasTicket {
    print("Welcome to the cinema!")
}

let isWeekend = false
print(!isWeekend)
print(age < 10 || hasTicket)
Ожидаемый результат
Welcome to the cinema!
true
true
Интерактив
Загрузка симуляции…
Оператор && работает как вентиль AND: результат истинен, только если оба входа истинны. Попробуй также вентили OR (||) и NOT (!).

`switch` и шаблоны

Когда одно значение нужно сравнить со многими вариантами, switch читается легче. switch в Swift очень мощный: case может проверять несколько значений, диапазон (90...100) и даже шаблон кортежа. Выполняется первый подходящий case, после чего switch заканчивается — break писать не нужно.

Swift
let score = 87
switch score {
case 90...100:
    print("A")
case 75..<90:
    print("B")
case 60..<75:
    print("C")
default:
    print("F")
}

let letter: Character = "e"
switch letter {
case "a", "e", "i", "o", "u":
    print("vowel")
default:
    print("consonant")
}
Ожидаемый результат
B
vowel

Кортеж хранит несколько значений вместе, например координаты точки: (0, 5). switch умеет проверять части кортежа по отдельности: _ означает «любое значение», let x связывает значение с именем, а where добавляет дополнительное условие.

Swift
let point = (3, 3)
switch point {
case (0, 0):
    print("origin")
case (0, _):
    print("on the y-axis")
case (let x, 0):
    print("on the x-axis at \(x)")
case let (x, y) where x == y:
    print("on the diagonal")
default:
    print("somewhere else")
}
Ожидаемый результат
on the diagonal

`for-in` и диапазоны

Цикл for-in выполняет код по одному разу для каждого элемента последовательности. Самая простая последовательность — диапазон: 1...5 — числа от 1 до 5 (5 включительно), а 0..<5 — от 0 до 4 (5 не входит). Чтобы изменить шаг, есть функция stride(from:through:by:).

Swift
for i in 1...3 {
    print("Round \(i)")
}

var sum = 0
for n in 1...100 {
    sum += n
}
print("Sum: \(sum)")

for n in stride(from: 10, through: 0, by: -5) {
    print(n)
}

for ch in "Baku" {
    print(ch, terminator: "-")
}
print("!")
Ожидаемый результат
Round 1
Round 2
Round 3
Sum: 5050
10
5
0
B-a-k-u-!

`while`, `break` и `continue`

Когда число повторений заранее неизвестно, используют while: цикл продолжается, пока условие истинно. repeat-while проверяет условие в конце, поэтому тело выполняется хотя бы один раз. Лейла каждый месяц кладёт в копилку 20 манатов — сколько месяцев нужно, чтобы накопить 150 манатов?

Swift
var balance = 100
var months = 0
while balance < 150 {
    balance += 20
    months += 1
}
print("After \(months) months: \(balance) AZN")

var countdown = 3
repeat {
    print(countdown)
    countdown -= 1
} while countdown > 0
print("Go!")
Ожидаемый результат
After 3 months: 160 AZN
3
2
1
Go!

continue пропускает остаток текущего шага и переходит к следующему, а break полностью останавливает цикл. Код ниже пропускает чётные числа и останавливается, дойдя до числа больше 7:

Swift
for n in 1...10 {
    if n % 2 == 0 {
        continue
    }
    if n > 7 {
        break
    }
    print(n)
}
Ожидаемый результат
1
3
5
7

Главное

  • if / else if / else выбирают код по условию; фигурные скобки обязательны.
  • && (и), || (или), ! (не) объединяют условия.
  • switch проверяет значения, диапазоны и шаблоны кортежей, должен быть исчерпывающим и не требует break.
  • 1...5 включает 5, а 0..<5 — нет.
  • while проверяет условие в начале, repeat-while — в конце; break останавливает цикл, continue пропускает шаг.

Проверь себя

Вопросов: 10. Каждый правильный ответ приносит XP.

1 / 10
Какие значения принимает i в цикле for i in 1..<4?