В чем разница между conventions и designated?

convenience инициализаторы являются вторичными, они могут вызывать только другие инициализаторы из того же класса, в конечном итоге делегируя вызов designated инициализатору.

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

Что ответить на собеседовании

convenience инициализаторы являются вторичными, они могут вызывать только другие инициализаторы из того же класса, в конечном итоге делегируя вызов designated инициализатору. Используются для добавления удобных способов создания экземпляров.

Подробный разбор

Ответ с пояснениями

convenience инициализаторы являются вторичными, они могут вызывать только другие инициализаторы из того же класса, в конечном итоге делегируя вызов designated инициализатору. Используются для добавления удобных способов создания экземпляров.

designated инициализаторы являются основными, они гарантируют полную инициализацию всех хранимых свойств класса (своих и родительских). Они могут вызывать designated инициализаторы родительского класса. У каждого класса должен быть хотя бы один designated инициализатор.

class BaseClass {
    var baseProperty: String

    init(baseProperty: String) { // Designated инициализатор
        self.baseProperty = baseProperty
    }
}

class DerivedClass: BaseClass {
    var derivedProperty: Int

    init(baseProperty: String, derivedProperty: Int) { // Designated инициализатор
        self.derivedProperty = derivedProperty
        super.init(baseProperty: baseProperty) // Вызов designated родителя
    }

    convenience init(baseProperty: String) { // Convenience инициализатор
        self.init(baseProperty: baseProperty, derivedProperty: 0) // Делегирование своему designated
    }

    convenience init() { // Convenience инициализатор
        self.init(baseProperty: "Default Base", derivedProperty: -1) // Делегирование своему designated
    }
}

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее