Sobes.tech
Junior — Middle

Swiftda convenience initializer konstruktorida super metodini chaqirish mumkinmi?

sobes.tech AI

AIdan javob

Swiftda super.init chaqiruvi convenience initializer konstruktorida to'g'ridan-to'g'ri mumkin emas. Swiftdagi boshlang'ich qilish qoidalariga ko'ra, convenience boshlang'ichlar o'z sinfining boshqa boshlang'ichini chaqirishi kerak, ota sinfini emas.

Faqatgina designated initializer (asosiy boshlang'ich) super.init chaqira oladi. Shuning uchun, convenience boshlang'ich avvalo o'z sinfining designated initializerini chaqishi kerak, u esa o'z navbatida super.initni chaqiradi.

Misol:

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

class Child: Parent {
    override init() {
        super.init() // designated initializerda ota sinfni chaqirish
        print("Child designated init")
    }

    convenience init(param: Int) {
        self.init() // o'z sinfining designated initializerini chaqirish
        print("Child convenience init param bilan \(param)")
    }
}

let c = Child(param: 5)

Bu yerda, convenience init self.init()ni chaqiradi va self.init() super.init()ni chaqiradi.