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.initorqali, 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.