Sobes.tech
Junior — Middle

Swiftте convenience initializer конструкторунда 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() // негизги баштоочуда ата-энесин чакыруу
        print("Child designated init")
    }

    convenience init(param: Int) {
        self.init() // өз классынын негизги баштоочусун чакыруу
        print("Child convenience init параметри менен \(param)")
    }
}

let c = Child(param: 5)

Бул жерде, convenience init self.init() чакырып, ал super.init() чакырат.