Sobes.tech
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()։