Выбор ответа Senior Ошибки обновлено
Тип Never в Swift
Вопрос
Почему в guard let url = URL(string: s) else { fatalError("bad url") } компилятор не требует return?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: fatalError возвращает Never, управление из него не вернётся. Функция с типом результата Never никогда не возвращает управление: она завершает процесс, бесконечно крутится или бросает.
Варианты ответа
fatalErrorвозвращаетNever, управление из него не вернётсяправильный ответfatalErrorэто ключевое слово языка, такое же, какreturn- В
guardвыход необязателен, если телоelseне пустое - Компилятор вставляет
returnпослеfatalErrorавтоматически сам
Разбор
Функция с типом результата Never никогда не возвращает управление: она завершает процесс, бесконечно крутится или бросает. Компилятор использует это в анализе потока управления, поэтому else в guard считается выходом. Свои функции тоже можно объявить -> Never, например func unreachable(_ m: String) -> Never. Never ещё и пустой enum, его используют как тип ошибки, которой не бывает: Result<Int, Never>, throws(Never).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.