Чем отличается convenience от designated?

Этот вопрос проверяет понимание различий между вспомогательными (convenience) и основными (designated) инициализаторами в Swift.

Короткий ответ

Designated — это основной инициализатор, который полностью инициализирует все свойства объекта и вызывает инициализатор суперкласса (если это класс). Convenience — это вспомогательный инициализатор, который вызывает другой инициализатор того же класса, чтобы упростить создание объекта.

Длинный ответ

Designated инициализаторы:

Это основные инициализаторы класса, которые должны инициализировать все свойства и вызывать инициализатор суперкласса, если класс наследуется. Каждый класс должен иметь хотя бы один designated инициализатор.
Пример:

class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) { // designated
        self.name = name
        self.age = age
    }
}

 

Convenience инициализаторы:

Convenience инициализаторы используются для создания дополнительных способов инициализации объекта. Они должны обязательно вызывать другой инициализатор того же класса.
Пример:

class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    convenience init(name: String) { // convenience
        self.init(name: name, age: 0)
    }
}
let person = Person(name: "Alice")

Правила:

- Convenience инициализаторы должны вызывать другой инициализатор того же класса.

- Designated инициализаторы могут вызывать только инициализаторы суперкласса или инициализировать свойства.


Используйте designated для полной инициализации объекта, а convenience — для упрощения и создания дополнительных вариантов инициализации.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Swift

Подпишись на iOS Developer в телеграм