Назад к вопросам
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
}
}