Sobes.tech
Middle

Qual è la differenza tra conventions e designated?

sobes.tech AI

Risposta dell'AI

Gli inizializzatori di convenienza sono secondari, possono chiamare solo altri inizializzatori della stessa classe, delegando infine la chiamata all'inizializzatore designato. Sono usati per aggiungere modi comodi di creare istanze.

Gli inizializzatori designati sono principali, garantiscono la completa inizializzazione di tutte le proprietà memorizzate della classe (le proprie e quelle della classe genitore). Possono chiamare inizializzatori designati della classe genitore. Ogni classe deve avere almeno un inizializzatore designato.

class BaseClass {
    var baseProperty: String

    init(baseProperty: String) { // Inizializzatore designato
        self.baseProperty = baseProperty
    }
}

class DerivedClass: BaseClass {
    var derivedProperty: Int

    init(baseProperty: String, derivedProperty: Int) { // Inizializzatore designato
        self.derivedProperty = derivedProperty
        super.init(baseProperty: baseProperty) // Chiamata all'inizializzatore designato del genitore
    }

    convenience init(baseProperty: String) { // Inizializzatore di convenienza
        self.init(baseProperty: baseProperty, derivedProperty: 0) // Delega al proprio inizializzatore designato
    }

    convenience init() { // Inizializzatore di convenienza
        self.init(baseProperty: "Default Base", derivedProperty: -1) // Delega al proprio inizializzatore designato
    }
}