Sobes.tech
Junior — Middle

Vai ir iespējams izsaukt super metodi convenience initializer konstruktorā Swift?

sobes.tech AI

Atbilde no AI

Swift'tə super.init çağırışı convenience initializer-də birbaşa mümkün deyil. Swift-də başlanğıc qaydalarına görə, convenience başlanğıclar eyni sinfin başqa bir başlanğıcını çağırmalıdır, üst sinfinin deyil.

Yalnız designated initializer (əsas başlanğıc) super.init çağıra bilər. Buna görə də, convenience başlanğıcı əvvəlcə öz sinfinin designated başlanğıcını çağırmalı və o da super.init-i çağıracaq.

Misal:

class Parent {
    init() {
        print("Parent init")
    }
}

class Child: Parent {
    override init() {
        super.init() // designated initializer-də üst sinfi çağırır
        print("Child designated init")
    }

    convenience init(param: Int) {
        self.init() // öz sinfinin designated initializer-ını çağırır
        print("Child convenience init param ilə \(param)")
    }
}

let c = Child(param: 5)

Burada, convenience init self.init()-i çağırır və self.init() super.init()-i çağırır.