Junior — Middle
Възможно ли е да се извика методът super в конструктор на удобство инициализатор в Swift?
sobes.tech AI
Отговор от 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 с параметър \(param)")
}
}
let c = Child(param: 5)
Тук convenience init извиква self.init(), а self.init() извиква super.init().