Sobes.tech
Middle

Swiftda convention va designated inicializatorlar o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

  • Belgilangan Inizializator: Sinfdagi asosiy, "asosiy" inicializator. U sinfning barcha o'ziga xos saqlash xususiyatlarini to'liq boshlashlari kerak va keyin yuqoriga, super.init orqali, belgilangan inicializatorni chaqirishlari kerak. Har bir sinf kamida bitta belgilangan inicializatorga ega bo'lishi kerak.

  • Qulay Inizializator: Ba'zi holatlarda sinf nusxalarini yaratishni soddalashtirish uchun mo'ljallangan yordamchi inicializator. Majburiy ravishda, u o'z sinfidagi boshqa inicializatorni — belgilangan yoki qulay — chaqirishi kerak. Oxir-oqibat, qulay inicializatorlar zanjiri belgilangan inicializator chaqiruviga olib kelishi kerak. Qulay inicializatorlar majburiy emas.

Mana boshlash delegatsiya sxemasi:

Qulay -> Belgilangan (xuddi shuningdek sinfda)
Belgilangan -> Belgilangan (ota sinfda)

Misol:

class MyClass {
    var value: Int
    var name: String

    // Belgilangan inicializator
    init(value: Int, name: String) {
        self.value = value
        self.name = name
    }

    // Qulay inicializator
    convenience init(value: Int) {
        self.init(value: value, name: "DefaultName") // Bu sinfdagi belgilangan inicializatorni chaqiradi
    }

    // Boshqa qulay inicializator
    convenience init(name: String) {
        self.init(value: 0, name: name) // Bu sinfdagi belgilangan inicializatorni chaqiradi
    }
}

let instance1 = MyClass(value: 10, name: "Custom")
let instance2 = MyClass(value: 5)
let instance3 = MyClass(name: "Another")

Asosiy farq, ularning boshlash zanjiridagi roli va delegatsiya qoidalarida: belgilangan inicializator o'z xususiyatlarini to'liq boshlashni ta'minlaydi va ota sinf inicializatoriga delegatsiya qiladi, qulay inicializator esa, oxir-oqibat, xuddi shuningdek sinfda boshqa inicializatorga delegatsiya qilgan holda, nusxalarni yaratishni soddalashtiradi va oxir-oqibat belgilangan inicializatorni chaqiradi.