Junior — Middle
Kas on võimalik kutsuda super meetodit convenience initializer konstruktoris Swiftis?
sobes.tech AI
Vastus AI-lt
Swiftis super.init kutsumine convenience initializer-is otse võimalik ei ole. Swifti algatamise reeglite kohaselt peavad convenience algatajad kutsuma teise sama klassi algatuse, mitte superklassi algatuse.
Ainult määratud algataja (peamine algataja) võib kutsuda super.init. Seetõttu peab convenience algataja esmalt kutsuma oma klassi määratud algatuse, mis omakorda kutsub super.init.
Näide:
class Parent {
init() {
print("Parent init")
}
}
class Child: Parent {
override init() {
super.init() // kutsumine määratud algatuse sees superklassi
print("Child määratud init")
}
convenience init(param: Int) {
self.init() // kutsumine oma klassi määratud algatusest
print("Child convenience init parameetriga \(param)")
}
}
let c = Child(param: 5)
Siin, convenience init kutsub self.init(), mis omakorda kutsub super.init.