Назад к вопросам
Middle
90
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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
    }
}