Как устроены опционалы в Swift
Вопрос
Расскажите, что такое опционал и как вы с ним работаете.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Optional это enum с кейсами `.none` и `.some(Wrapped)`, `T?` сахар
Безопасная распаковка: `if let`, `guard let`, `??`, опциональная цепочка
`!` и IUO падают на `nil`, уместны редко (аутлеты, гарантированные инварианты)
`map`, `flatMap`, `compactMap` для преобразований без распаковки
Опционал делает отсутствие значения частью типа и проверяется компилятором
Что могут спросить следом
- Когда вы всё-таки используете
!? - Что такое двойной опционал и где он возникает?
Разбор
Опционал в Swift это обычный enum Optional<Wrapped> с двумя кейсами: .none и .some(значение). Запись String? просто сахар. Идея в том, что отсутствие значения становится частью типа: я не могу случайно использовать String? как String, компилятор заставит распаковать. Распаковываю через guard let для ранних выходов, через if let для локальной ветки, через ?? для значения по умолчанию и через ?. для цепочек. Для преобразований без распаковки есть map и flatMap, для массивов compactMap. Принудительная распаковка ! и IUO падают на nil, поэтому я использую их только там, где nil это ошибка программиста, например аутлеты или ресурсы из бандла, которые обязаны быть.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Force unwrap в продакшен-коде: политика команды
Следующий вопрос
Почему weak-ссылка всегда опциональна