Aký je rozdiel medzi convention a designated inicializátormi v Swift?
sobes.tech AI
Odpoveď od AI
-
Doložen inicializátor: Hlavný, „základný“ inicializátor v triede. Musí úplne inicializovať všetky vlastné uložené vlastnosti triedy a potom volať doložený inicializátor nadtriedy (cez
super.init). Každá trieda by mala mať aspoň jeden doložený inicializátor. -
Praktický inicializátor: Pomocný inicializátor určený na zjednodušenie vytvárania inštancií triedy v určitých scenároch. Musí volať iný inicializátor rovnakej triedy — buď doložený alebo praktický. Nakoniec, reťazec volaní praktických inicializátorov by mal viesť k volaniu doloženého inicializátora v rovnakej triede. Praktické inicializátory sú voliteľné.
Tu je schéma delegácie inicializácie:
Convenience -> Doložený (v rovnakej triede)
Doložený -> Doložený (v rodičovskej triede)
Príklad:
class MyClass {
var value: Int
var name: String
// Doložený inicializátor
init(value: Int, name: String) {
self.value = value
self.name = name
}
// Praktický inicializátor
convenience init(value: Int) {
self.init(value: value, name: "DefaultName") // Volá doložený inicializátor v rovnakej triede
}
// Iný praktický inicializátor
convenience init(name: String) {
self.init(value: 0, name: name) // Volá doložený inicializátor v rovnakej triede
}
}
let instance1 = MyClass(value: 10, name: "Custom")
let instance2 = MyClass(value: 5)
let instance3 = MyClass(name: "Another")
Kľúčový rozdiel spočíva v ich úlohe v reťazci inicializácie a pravidlách delegácie: doložený inicializátor zabezpečuje úplnú inicializáciu vlastných vlastností a deleguje inicializáciu na rodičovskú triedu, zatiaľ čo praktický inicializátor zjednodušuje vytváranie inštancií delegovaním na iný inicializátor v rovnakej triede, ktorý nakoniec volá doložený inicializátor.