Ի՞նչ տարբերություն կա 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")
Հիմնական տարբերությունը նրանց դերը ինիցիալիզացիայի շղթայում և ներկայացման կանոններում է. նշված ինիցիալիզատորը երաշխավորում է իր սեփական հատկությունների լրիվ ինիցիալիզացումը և ներկայացնում է ինիցիալիզացիան հորին՝ դեպի հորին՝, մինչդեռ հարմար ինիցիալիզատորը հեշտացնում է օրինակների ստեղծումը՝ ներկայացնելով ուրիշ ինիցիալիզատորին նույն դասում, որը վերջում կանչում է նշված ինիցիալիզատորին։