Sobes.tech
Junior — Middle

Оё имкон дорад, ки дар конструктори convenience initializer дар Swift усули 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(), а self.init() извиква super.init().