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
}
}