Junior — Middle
Je možné volať metódu super v konštruktore convenience initializer v Swift?
sobes.tech AI
Odpoveď od AI
V Swiftu nie je možné priamo volať super.init v konštruktore convenience initializer. Podľa pravidiel inicializácie v Swiftu musia convenience inicializátory volať iný inicializátor rovnakej triedy, nie inicializátor nadtriedy.
Iba designated initializer (hlavný inicializátor) môže volať super.init. Preto musí convenience inicializátor najskôr volať designated inicializátor svojej triedy, ktorý následne zavolá super.init.
Príklad:
class Parent {
init() {
print("Parent init")
}
}
class Child: Parent {
override init() {
super.init() // volanie nadtriedy v designated inicializátore
print("Child designated init")
}
convenience init(param: Int) {
self.init() // volanie designated inicializátora svojej triedy
print("Child convenience init s parametrom \(param)")
}
}
let c = Child(param: 5)
Tu convenience init volá self.init(), a self.init() volá super.init().