Ответ
Инициализация — это процесс создания готового к использованию экземпляра класса, структуры или перечисления. В Swift она выполняется с помощью инициализаторов (init), которые устанавливают начальные значения для всех свойств экземпляра.
Основные типы инициализаторов:
- Designated (Назначенные) – основные инициализаторы, полностью инициализирующие все свойства.
- Convenience (Вспомогательные) – вторичные инициализаторы, которые в конечном счёте вызывают designated-инициализатор.
- Failable (
init?) – могут возвращатьnilв случае неудачи. - Required (
required init) – обязывают подклассы предоставить свою реализацию.
Пример иерархии инициализации:
class Vehicle {
let wheels: Int
// Designated инициализатор
init(wheels: Int) {
self.wheels = wheels
}
// Failable инициализатор
init?(from string: String) {
guard let intValue = Int(string) else { return nil }
self.wheels = intValue
}
}
class Car: Vehicle {
let brand: String
// Designated инициализатор подкласса
init(brand: String) {
self.brand = brand
super.init(wheels: 4) // Должен вызвать designated инициализатор суперкласса
}
// Convenience инициализатор
convenience override init(wheels: Int) {
self.init(brand: "Unknown")
}
}
Важные правила:
- Designated инициализатор должен гарантировать инициализацию всех свойств своего класса перед вызовом инициализатора суперкласса.
- Convenience инициализатор должен в конечном итоге вызвать designated инициализатор того же класса.
- Для освобождения ресурсов используется деинициализатор (
deinit).