Sobes.tech
Middle

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.init vasitə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.