Junior — Middle
Lehetséges a super metódus hívása a convenience initializer konstruktorában Swift-ben?
sobes.tech MI
Válasz az MI-től
Swiftben a super.init hívása a convenience initializer konstruktorban nem közvetlenül lehetséges. A Swift inicializálási szabályai szerint a convenience inicializálóknak egy másik azonos osztálybeli inicializálót kell hívniuk, nem a szülőosztályit.
Csak a designated initializer (fő inicializáló) hívhatja a super.init-et. Ezért a convenience inicializálónak először a saját osztályának designated inicializálóját kell hívnia, amely aztán meghívja a super.init-et.
Példa:
class Parent {
init() {
print("Parent init")
}
}
class Child: Parent {
override init() {
super.init() // a szülőhívás a designated inicializálóban
print("Child designated init")
}
convenience init(param: Int) {
self.init() // a saját osztályának designated inicializálójának hívása
print("Child convenience init param értékkel \(param)")
}
}
let c = Child(param: 5)
Ebben az esetben a convenience init meghívja a self.init(), ami pedig meghívja a super.init()-et.