Junior — Middle
Swiftте convenience initializer конструкторунда super ыкмасын чакыру мүмкүнбү?
sobes.tech AI
AIден жооп
Swiftте super.init чакыруу convenience initializer ичинде түздөн-түз мүмкүн эмес. Swiftтеги баштоо эрежелерине ылайык, convenience баштоочулар ошол класстагы башка баштоочуну чакырышы керек, ата-энесинин эмес.
Тек гана designated initializer (негизги баштоочу) super.init чакыра алат. Ошондуктан, convenience баштоочу биринчи өз классынын designated баштоочусун чакырышы керек, ал эми ал өз кезегинде super.init чакырган болот.
Мисал:
class Parent {
init() {
print("Parent init")
}
}
class Child: Parent {
override init() {
super.init() // негизги баштоочуда ата-энесин чакыруу
print("Child designated init")
}
convenience init(param: Int) {
self.init() // өз классынын негизги баштоочусун чакыруу
print("Child convenience init параметри менен \(param)")
}
}
let c = Child(param: 5)
Бул жерде, convenience init self.init() чакырып, ал super.init() чакырат.