Sobes.tech
Middle

Quelle est la différence entre conventions et designated?

sobes.tech IA

Réponse de l'IA

Les initialiseurs de convenance sont secondaires, ils ne peuvent appeler que d'autres initialiseurs du même classe, déléguant finalement l'appel à l'initialiseur désigné. Ils sont utilisés pour ajouter des moyens pratiques de créer des instances.

Les initialiseurs désignés sont principaux, ils garantissent l'initialisation complète de toutes les propriétés stockées de la classe (les propres et celles de la classe parente). Ils peuvent appeler des initialiseurs désignés de la classe parente. Chaque classe doit avoir au moins un initialiseurs désigné.

class BaseClass {
    var baseProperty: String

    init(baseProperty: String) { // Initialiseurs désignés
        self.baseProperty = baseProperty
    }
}

class DerivedClass: BaseClass {
    var derivedProperty: Int

    init(baseProperty: String, derivedProperty: Int) { // Initialiseurs désignés
        self.derivedProperty = derivedProperty
        super.init(baseProperty: baseProperty) // Appel à l'initialiseur désigné du parent
    }

    convenience init(baseProperty: String) { // Initialiseurs de convenance
        self.init(baseProperty: baseProperty, derivedProperty: 0) // Délégation à son propre initialiseurs désigné
    }

    convenience init() { // Initialiseurs de convenance
        self.init(baseProperty: "Default Base", derivedProperty: -1) // Délégation à son propre initialiseurs désigné
    }
}