Sobes.tech
Middle

Care este diferența dintre convenții și desemnat?

sobes.tech AI

Răspuns de la AI

Inițializatoarele de conveniență sunt secundare, ele pot apela doar alte inițializatoare din aceeași clasă, delegând în cele din urmă apelul către inițializatorul desemnat. Sunt folosite pentru a adăuga moduri convenabile de a crea instanțe.

Inițializatoarele desemnate sunt principale, asigură inițializarea completă a tuturor proprietăților stocate ale clasei (ale sale și ale părintelui). Ele pot apela inițializatoare desemnate ale clasei părinte. Fiecare clasă trebuie să aibă cel puțin un inițializator desemnat.

class BaseClass {
    var baseProperty: String

    init(baseProperty: String) { // Inițializator desemnat
        self.baseProperty = baseProperty
    }
}

class DerivedClass: BaseClass {
    var derivedProperty: Int

    init(baseProperty: String, derivedProperty: Int) { // Inițializator desemnat
        self.derivedProperty = derivedProperty
        super.init(baseProperty: baseProperty) // Apel la inițializatorul desemnat al părintelui
    }

    convenience init(baseProperty: String) { // Inițializator de conveniență
        self.init(baseProperty: baseProperty, derivedProperty: 0) // Delegare la propriul inițializator desemnat
    }

    convenience init() { // Inițializator de conveniență
        self.init(baseProperty: "Default Base", derivedProperty: -1) // Delegare la propriul inițializator desemnat
    }
}