Sobes.tech
Junior — Middle

Възможно ли е да се извика методът super в конструктор на удобство инициализатор в Swift?

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(), а self.init() извиква super.init().