Junior — Middle
Je možné zavolat metodu super v konstruktoru convenience initializer v Swiftu?
sobes.tech AI
Odpověď od AI
V Swiftu není přímý volání super.init v konstruktoru convenience initializer. Podle pravidel inicializace ve Swiftu musí convenience inicializátory volat jiný inicializátor téže třídy, nikoliv inicializátor nadtřídy.
Pouze designated inicializátor (hlavní inicializátor) může volat super.init. Proto musí convenience inicializátor nejprve zavolat designated inicializátor své třídy, který pak zavolá super.init.
Příklad:
class Parent {
init() {
print("Parent init")
}
}
class Child: Parent {
override init() {
super.init() // volání nadtřídy v designated inicializátoru
print("Child designated init")
}
convenience init(param: Int) {
self.init() // volání designated inicializátoru své třídy
print("Child convenience init s parametrem \(param)")
}
}
let c = Child(param: 5)
Zde convenience init volá self.init(), a self.init() volá super.init().