Ricordiamo cosa è un inizializzatore designato.
Un inizializzatore designato inizializza completamente tutte le proprietà introdotte da tale classe e chiede un adeguato superclasse inizializzatore per continuare il processo di inizializzazione il superclasse catena.
Estratto da: Apple Inc. “The Swift Programming Language.”
class ClassA {
private let propertyA: Int
init(propertyA: Int) {
self.propertyA = propertyA
}
}
class ClassB: ClassA {
private let propertyB: Int
init(propertyA: Int, propertyB: Int) {
self.propertyB = propertyB
super.init(propertyA: propertyA)
}
}
extension ClassB {
// If this was a designated initializer, you need to initialize propertyB before calling a superclass initializer.
// But propertyB is a private property that you can't access.
// If you don't have the source code of ClassB, you will not even know there is a property called propertyB.
// This is why we can't use extensions to add designated initializers.
init(propertyC: Int) {
...
}
}
fonte
2014-11-12 03:34:58