Что такое convenience init в Swift?

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

Ответ

Convenience init — это вспомогательный инициализатор класса в Swift, который предоставляет альтернативный, упрощенный способ создания экземпляра. Он должен делегировать выполнение designated (основному) инициализатору того же класса.

Ключевые правила:

  1. Должен вызывать self.init (designated init) того же класса.
  2. Не может вызывать super.init (это делает designated init).
  3. Объявляется с ключевым словом convenience.
  4. Упрощает создание объектов, предоставляя значения по умолчанию для части параметров.

Пример:

class Person {
    var name: String
    var age: Int

    // Designated init (основной)
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    // Convenience init (вспомогательный)
    convenience init(name: String) {
        // Должен вызвать designated init
        self.init(name: name, age: 0) // Устанавливает возраст по умолчанию
    }
}

// Использование
let adult = Person(name: "Anna", age: 30) // Designated init
let child = Person(name: "Max") // Convenience init, age = 0