Sobes.tech
Junior — Middle

Swift-ში convenience initializer-ის კონსტრუქტორში super მეთოდის გამოძახება შესაძლებელია?

sobes.tech AI

პასუხი AI-სგან

Swift'te super.init çağırışı convenience initializer içinde 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ıdır, üst sınıfı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 başlatıcısını çağırmalı ve o da super.init'i çağıracaktı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.