Swift-də convention və designated initializer-lər arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
-
Təyin Edilmiş Başlatıcı: Sinifdə əsas, "əsas" başlatıcıdır. O, sinifin özünün bütün saxlanılan xüsusiyyətlərini tamamilə başlatmalı və sonra yuxarıda,
super.initvasitəsilə, təyin edilmiş başlatıcıyı çağırmalıdır. Hər sinif ən azı bir təyin edilmiş başlatıcıya malik olmalıdır. -
Rahət Başlatıcı: Müəyyən ssenarilərdə sinif nümunələrinin yaradılmasını sadələşdirmək üçün nəzərdə tutulmuş köməkçi başlatıcıdır. Mütləq olaraq, o, eyni sinifdə başqa bir başlatıcı — ya təyin edilmiş, ya da rahat — çağırmalıdır. Nəticədə, rahat başlatıcıların çağırış zənciri eyni sinifdəki təyin edilmiş başlatıcı çağırışına gətirib çıxarmalıdır. Rahat başlatıcılar seçimlidir.
Burada başlatma nümayəndəliyi sxemi:
Convenience -> Təyin Edilmiş (eyni sinifdə)
Təyin Edilmiş -> Təyin Edilmiş (valideyn sinifdə)
Nümunə:
class MyClass {
var value: Int
var name: String
// Təyin edilmiş başlatıcı
init(value: Int, name: String) {
self.value = value
self.name = name
}
// Rahat başlatıcı
convenience init(value: Int) {
self.init(value: value, name: "DefaultName") // Eyni sinifdə təyin edilmiş başlatıcıyı çağırır
}
// Digər rahat başlatıcı
convenience init(name: String) {
self.init(value: 0, name: name) // Eyni sinifdə təyin edilmiş başlatıcıyı çağırır
}
}
let instance1 = MyClass(value: 10, name: "Custom")
let instance2 = MyClass(value: 5)
let instance3 = MyClass(name: "Another")
Əsas fərq onların başlatma zəncirindəki rolu və nümayəndəlik qaydalarıdır: təyin edilmiş başlatıcı öz xüsusiyyətlərinin tam başlatılmasını təmin edir və valideynin başlatıcısına nümayəndəlik edir, rahat başlatıcı isə, nəticədə, eyni sinifdəki başqa bir başlatıcıya nümayəndəlik edərək nümunələrin yaradılmasını sadələşdirir və nəticədə təyin edilmiş başlatıcıyı çağırır.