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() // վերին դասի կանչը `designated` ինիցիալիզատորում
print("Child designated init")
}
convenience init(param: Int) {
self.init() // իր դասի `designated` ինիցիալիզատորին կանչում
print("Child convenience init պարամետրով \(param)")
}
}
let c = Child(param: 5)
Այստեղ, convenience init-ը կանչում է self.init(), որը իր հերթին կանչում է super.init()։