Sobes.tech
Junior — Middle

Swift'te kolaylık başlatıcısında super metodunu çağırmak mümkün mü?

sobes.tech yapay zeka

AI'dan gelen yanıt

Swift'te super.init çağrısı convenience initializer yapıcısında doğrudan mümkün değildir. Swift'teki başlatma kurallarına göre, convenience başlatıcılar aynı sınıfın başka bir başlatıcısını çağırmalı, üst sınıfın başlatıcısını değil.

Yalnızca designated initializer (ana başlatıcı) super.init çağırabilir. Bu nedenle, convenience başlatıcı önce kendi sınıfının designated initializer'ını çağırmalı ve o da super.init çağırmalıdır.

Örnek:

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

class Child: Parent {
    override init() {
        super.init() // designated initializer'da üst sınıfı çağırma
        print("Child designated init")
    }

    convenience init(param: Int) {
        self.init() // kendi sınıfının designated initializer'ını çağırma
        print("Child convenience init param ile \(param)")
    }
}

let c = Child(param: 5)

Burada, convenience init self.init()'i çağırır ve self.init() super.init()'i çağırır.