Sobes.tech
Middle

Ի՞նչ տարբերություն կա Swift-ում convention և designated ինիցիալիզատորների միջև։

sobes.tech AI

Պատասխան AI-ից

  • Նշված Ինիցիալիզատոր: Հիմնական, «հիմնական» ինիցիալիզատորն է դասում: Նա պետք է լրիվ կերպով ինիցիալիզացնի դասի սեփական պահվող հատկությունները, ապա կանչի վերին հարթության նշված ինիցիալիզատորին (super.init). Յուրաքանչյուր դաս պետք է ունենա առնվազն մեկ նշված ինիցիալիզատոր:

  • Հարմար ինիցիալիզատոր: Օգնական ինիցիալիզատոր, որը նախատեսված է հեշտացնելու դասի օրինակների ստեղծումը որոշ սցենարներում: Պետք է կանչի նույն դասի այլ ինիցիալիզատոր — կամ նշված, կամ հարմար: Վերջիվերջո, հարմար ինիցիալիզատորների շղթան պետք է հանգեցնի նշված ինիցիալիզատորին նույն դասում: Հարմար ինիցիալիզատորները ընտրովի են:

Սա է ինիցիալիզացիայի ներկայացման սխեման՝

Convenience -> Նշված (նույն դասում)
Նշված -> Նշված (հայրական դասում)

Օրինակ՝

class MyClass {
    var value: Int
    var name: String

    // Նշված ինիցիալիզատոր
    init(value: Int, name: String) {
        self.value = value
        self.name = name
    }

    // Հարմար ինիցիալիզատոր
    convenience init(value: Int) {
        self.init(value: value, name: "DefaultName") // Կանչում է նույն դասի նշված ինիցիալիզատորը
    }

    // Այլ հարմար ինիցիալիզատոր
    convenience init(name: String) {
        self.init(value: 0, name: name) // Կանչում է նույն դասի նշված ինիցիալիզատորը
    }
}

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

Հիմնական տարբերությունը նրանց դերը ինիցիալիզացիայի շղթայում և ներկայացման կանոններում է. նշված ինիցիալիզատորը երաշխավորում է իր սեփական հատկությունների լրիվ ինիցիալիզացումը և ներկայացնում է ինիցիալիզացիան հորին՝ դեպի հորին՝, մինչդեռ հարմար ինիցիալիզատորը հեշտացնում է օրինակների ստեղծումը՝ ներկայացնելով ուրիշ ինիցիալիզատորին նույն դասում, որը վերջում կանչում է նշված ինիցիալիզատորին։