Назад к вопросам
Junior — Middle
81
Возможно ли вызвать метод super в конструкторе convenience initializer в Swift?
Ответ от нейросети
sobes.tech AI
В Swift вызов super.init в конструкторе convenience initializer невозможен напрямую. По правилам инициализации в Swift, convenience инициализаторы должны вызывать другой инициализатор того же класса, а не инициализатор суперкласса.
Только designated initializer (основной инициализатор) может вызвать super.init. Таким образом, convenience инициализатор должен сначала вызвать designated инициализатор своего класса, а тот уже вызовет super.init.
Пример:
class Parent {
init() {
print("Parent init")
}
}
class Child: Parent {
override init() {
super.init() // вызов суперкласса в designated инициализаторе
print("Child designated init")
}
convenience init(param: Int) {
self.init() // вызов designated инициализатора своего класса
print("Child convenience init with param \(param)")
}
}
let c = Child(param: 5)
Здесь convenience init вызывает self.init(), а уже self.init() вызывает super.init().