Что такое инициализация в Swift?

«Что такое инициализация в Swift?» — вопрос из категории ООП, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Инициализация — это процесс создания готового к использованию экземпляра класса, структуры или перечисления. В Swift она выполняется с помощью инициализаторов (init), которые устанавливают начальные значения для всех свойств экземпляра.

Основные типы инициализаторов:

  1. Designated (Назначенные) – основные инициализаторы, полностью инициализирующие все свойства.
  2. Convenience (Вспомогательные) – вторичные инициализаторы, которые в конечном счёте вызывают designated-инициализатор.
  3. Failable (init?) – могут возвращать nil в случае неудачи.
  4. 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).