Sobes.tech
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.