Sobes.tech
Middle

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.