Этот вопрос проверяет знание жизненного цикла объектов и правил их инициализации в Swift.
В Swift есть designated, convenience и failable инициализаторы, а также автоматические инициализаторы для структур. Designated — основной инициализатор класса, convenience — вспомогательный. Failable может вернуть nil, если инициализация невозможна. У структур часто есть автоматически сгенерированный init. Каждый тип имеет свои правила и ограничения.
Инициализаторы в Swift отвечают за приведение объекта в корректное начальное состояние. Набор доступных инициализаторов зависит от того, класс это, структура или enum.
Инициализатор (init) — это специальный метод, который создаёт и настраивает экземпляр типа.
Это главный инициализатор класса.
Инициализирует все свойства текущего класса
Обязан вызывать designated инициализатор суперкласса
class User {
let name: String
init(name: String) {
self.name = name
}
}
Вспомогательный инициализатор.
Делегирует инициализацию другому init
Не может напрямую вызывать super.init
convenience init() {
self.init(name: "Guest")
}
Используется, когда создание объекта может завершиться неудачей.
init?(age: Int) {
if age < 0 { return nil }
}
Для структур Swift генерирует init автоматически, если нет пользовательских.
struct Point {
let x: Int
let y: Int
}
// init(x:y:) создаётся автоматически
Классы — designated, convenience, failable
Структуры — автоматические, пользовательские, failable
Enum — case-based и failable
Разные виды инициализаторов нужны для разных сценариев: строгой инициализации, удобных сокращений и безопасного создания объектов.