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().