Junior — Middle
Is het mogelijk om de super-methode aan te roepen in de constructor van een convenience initializer in Swift?
sobes.tech AI
Antwoord van AI
In Swift is de aanroep van super.init in de convenience initializer niet direct mogelijk. Volgens de initialisatieregels in Swift moeten convenience initializers een andere initializer van dezelfde klasse aanroepen, niet die van de superklasse.
Alleen de aangewezen initializer (de hoofdinitializer) mag super.init aanroepen. Daarom moet de convenience initializer eerst de aangewezen initializer van zijn eigen klasse aanroepen, die op zijn beurt super.init zal aanroepen.
Voorbeeld:
class Parent {
init() {
print("Parent init")
}
}
class Child: Parent {
override init() {
super.init() // aanroep van de superklasse in de aangewezen initializer
print("Child aangewezen init")
}
convenience init(param: Int) {
self.init() // aanroep van de aangewezen initializer van eigen klasse
print("Child convenience init met parameter \(param)")
}
}
let c = Child(param: 5)
Hier roept de convenience init self.init(), en self.init() roept super.init() aan.