Kuo skiriasi convention ir designated inicializatoriai Swift?
sobes.tech AI
Atsakymas iš AI
-
Nurodytasis Inicijatorius: Pagrindinis, "pagrindinis" inicijatorius klasėje. Jis turi visiškai inicializuoti visas savo klasės saugomus savybes, o tada iškviesti aukštesnįjį nurodytą ir inicijatorių (per
super.init). Kiekvienas klasė turi turėti bent vieną nurodytą inicijatorių. -
Patogus Inicijatorius: Pagalbinis inicijatorius, skirtas supaprastinti klasės pavyzdžių kūrimą tam tikrose situacijose. Jis būtinai turi iškviesti kitą inicijatorių iš to paties klasės – arba nurodytą, arba kitą patogų. Galiausiai, patogių inicijatorių grandinė turi vesti į nurodytą inicijatorių toje pačioje klasėje. Patogūs inicijatoriai nėra privalomi.
Štai inicijavimo delegavimo schema:
Patogus -> Nurodytas (toje pačioje klasėje)
Nurodytas -> Nurodytas (tėvų klasėje)
Pavyzdys:
class MyClass {
var value: Int
var name: String
// Nurodytas inicijatorius
init(value: Int, name: String) {
self.value = value
self.name = name
}
// Patogus inicijatorius
convenience init(value: Int) {
self.init(value: value, name: "DefaultName") // Iškviečia tą patį klasės nurodytą inicijatorių
}
// Patogus inicijatorius
convenience init(name: String) {
self.init(value: 0, name: name) // Iškviečia tą patį klasės nurodytą inicijatorių
}
}
let instance1 = MyClass(value: 10, name: "Custom")
let instance2 = MyClass(value: 5)
let instance3 = MyClass(name: "Another")
Pagrindinis skirtumas tarp jų yra jų vaidmuo inicializacijos grandinėje ir delegavimo taisyklės: nurodytas inicijatorius užtikrina pilną savo savybių inicializaciją ir deleguoja tėvų klasės inicializaciją, o patogūs inicijatoriai supaprastina pavyzdžių kūrimą, deleguodami kitam inicijatoriui toje pačioje klasėje, galų gale veda į nurodytą inicijatorių.