Sobes.tech
Middle

Jaký je rozdíl mezi conventions a designated?

sobes.tech AI

Odpověď od AI

Konzolové inicializátory jsou sekundární, mohou volat pouze jiné inicializátory stejné třídy, a nakonec delegují volání na určený inicializátor. Používají se k přidání pohodlných způsobů vytváření instancí.

Určené inicializátory jsou hlavní, zajišťují úplnou inicializaci všech uložených vlastností třídy (jejích a rodičovských). Mohou volat určené inicializátory rodičovské třídy. Každá třída by měla mít alespoň 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) // Volání určeného inicializátoru rodiče
    }

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

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