Sobes.tech
Middle

Aký je rozdiel medzi conventions a designated?

sobes.tech AI

Odpoveď od AI

Konzolové inicializátory sú sekundárne, môžu volať iba iné inicializátory rovnakej triedy, delegujúc nakoniec volanie na určený inicializátor. Používajú sa na pridanie pohodlných spôsobov vytvárania inštancií.

Určené inicializátory sú hlavné, zabezpečujú úplnú inicializáciu všetkých uložených vlastností triedy (svojich a rodičovských). Môžu volať určené inicializátory rodičovskej triedy. Každá trieda by mala mať aspoň jeden určený inicializátor.

class BaseClass {
    var baseProperty: String

    init(baseProperty: String) { // Určený inicializátor
        self.baseProperty = baseProperty
    }
}

class DerivedClass: BaseClass {
    var derivedProperty: Int

    init(baseProperty: String, derivedProperty: Int) { // Určený inicializátor
        self.derivedProperty = derivedProperty
        super.init(baseProperty: baseProperty) // Volanie určeného inicializátora rodiča
    }

    convenience init(baseProperty: String) { // Pohodlný inicializátor
        self.init(baseProperty: baseProperty, derivedProperty: 0) // Delegácia na vlastný určený inicializátor
    }

    convenience init() { // Pohodlný inicializátor
        self.init(baseProperty: "Default Base", derivedProperty: -1) // Delegácia na vlastný určený inicializátor
    }
}