Выбор ответа Junior Опционалы спрашивают часто обновлено
Разница между guard let и if let
Вопрос
Чем guard let x = value else { ... } отличается от if let x = value { ... }?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: После guard x доступна до конца области, а else обязан выйти. guard нужен для раннего выхода: если условие не выполнено, else должен покинуть область (return, throw, break, continue или вызов Never-функции), и компилятор это проверяет.
Варианты ответа
guardраспаковывает принудительно и падает наnilguardможно использовать только в циклах иswitch, аif letвезде- После
guardxдоступна до конца области, аelseобязан выйтиправильный ответ - Разницы нет, это синонимы с разным порядком веток
Разбор
guard нужен для раннего выхода: если условие не выполнено, else должен покинуть область (return, throw, break, continue или вызов Never-функции), и компилятор это проверяет. Зато распакованное значение живёт после guard до конца функции, без лишней вложенности. if let даёт значение только внутри своего блока. Падения на nil у guard нет, и ограничения «только в циклах» тоже.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Опционалы»
- Тип результата опциональной цепочки
- compactMap и опционалы
- Ранний выход через guard let
- Проваливаемый инициализатор init?
- Паттерн case let x? в Swift
- Способы распаковать опционал в Swift
- Задача на Swift: цепочка руководителей
- Задача на Swift: сумма корректных чисел из ввода