Sobes.tech
Junior — Middle

Este posibil să apelați metoda super în constructorul unui initializer de comoditate în Swift?

sobes.tech AI

Răspuns de la AI

În Swift, apelul super.init în constructorul convenience initializer nu este posibil direct. Conform regulilor de inițializare în Swift, initializatorii convenience trebuie să apeleze alt initializator din aceeași clasă, nu pe cel al superclasei.

Numai initializerul desemnat (cel principal) poate apela super.init. Prin urmare, convenience initializer trebuie mai întâi să apeleze initializerul desemnat al propriei clase, care la rândul său va apela super.init.

Exemplu:

class Parent {
    init() {
        print("Parent init")
    }
}

class Child: Parent {
    override init() {
        super.init() // apelul către superclasă în initializerul desemnat
        print("Child designated init")
    }

    convenience init(param: Int) {
        self.init() // apelul către initializerul desemnat al propriei clase
        print("Child convenience init cu param \(param)")
    }
}

let c = Child(param: 5)

Aici, convenience init apelează self.init(), iar self.init() apelează super.init().