Что выведет код Junior Опционалы обновлено

Что выведет Swift: опциональная цепочка и ??

Вопрос

Что выведет код?

struct Address { var city: String }
struct User { var address: Address? }

let users: [User?] = [User(address: Address(city: "Казань")), User(address: nil), nil]
for u in users {
    print(u?.address?.city ?? "нет")
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: Казань, нет, нет. Цепочка обрывается на первом nil: у второго пользователя нет адреса, третий сам nil.

Что выведет

Казань
нет
нет

Разбор

Цепочка обрывается на первом nil: у второго пользователя нет адреса, третий сам nil. В обоих случаях срабатывает значение по умолчанию.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме