Видеокурсы по изучению языка программирования Swift. Подробнее

Управление потоком

Если вы нашли опечатку в тексте, выделите ее и нажмите CTRL + ENTER.

Для создания условий используйте if и switch, а для создания циклов используйте for-inwhile, и repeat-while. Скобки вокруг условий или циклов не обязательны. Фигурные скобки вокруг тела условия или цикла — обязательны.

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}
print(teamScore)

В операторе if, условие должно быть Boolean выражение — это означает, что такой код как if score {…} ошибочный, никакого неявного сравнения с нулем не будет.

Вы можете использовать if и let вместе, чтобы работать со значениями, которые могут отсутствовать. Эти значения представлены как опциональные. Опциональные значения либо содержат значение, либо содержат nil, который обозначает отсутствие значения. Можно писать вопросительный знак (?) после типа значения, чтобы обозначить что оно опциональное.

var optionalString: String? = "Hello"
print(optionalString == nil)
 
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}

Задание

Поменяйте optionalName на nil. Какое приветствие вы получите? Добавьте else условие, которое установит другое приветствие, если optionalName равно nil.

Если опциональное значение nil, то условие считается ложным и код в фигурных скобках пропускается. Иначе, опциональное значение извлекается и назначается константе написанной после let, что делает извлеченное значение доступным внутри блока кода.

Другой способ обработки опциональных значений - это предоставление дефолтного значения, использую оператор ??. Если опциональное значение отсутствует, то будет использовано дефолтное значение вместо него.

let nickName: String? = nil
let fullName: String = "John Appleseed" 
let informalGreeting = "Hi \(nickName ?? fullName)"

Switch поддерживает любые данные и множество операторов сравнения — они не ограничены целыми числами и сравнениями.

let vegetable = "red pepper"
switch vegetable {
case "celery":
    let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress":
    let vegetableComment = "That would make a good tea sandwich."
case let x where x.hasSuffix("pepper"):
    let vegetableComment = "Is it a spicy \(x)?"
default:
    let vegetableComment = "Everything tastes good in soup."
}

Задание

Попробуйте удалить блок default. Какую ошибку вы получите?

Вы обратили внимание как мы можем использовать let в примере, чтобы создать константу, значение которой соответствует условию?

После исполнения кода внутри switch блока case, который попал под условие, программа выходит из оператора switch. Исполнение не продолжается к следующему блоку сase - это означает, что не нужно прерывать switch после каждого блока case с помощью оператора break.

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

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}
print(largest)

Задание

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

Используйте while чтобы повторять код, пока условие не поменяется. Условие цикла может также быть в конце, если нужно чтобы цикл выполнился хотя-бы один раз.

var n = 2
while n < 100 {
    n = n * 2
}
print(n)
 
var m = 2
repeat {
    m = m * 2
} while m < 100
print(m)

Вы можете ставить индекс, используя оператор ..< чтобы создать диапазон индексов:

var firstForLoop = 0
for i in 0..<4 {
    firstForLoop += i
}
print(firstForLoop)

Используйте ..< чтобы создать диапазон который будет пропускать последнее значение, либо используйте ... – диапазон который включает оба значения, и начальное и конечное.

 

 

Swift: 
3.0