required obliga a que todas las subclases implementen ese inicializador. Es especialmente importante cuando usas protocolos o inicialización desde NSCoder:
class Widget {
required init(frame: CGRect) {
// setup
}
}
class MiWidget: Widget {
required init(frame: CGRect) {
super.init(frame: frame)
// setup adicional
}
}
Herencia de inicializadores
Una subclase hereda automáticamente los initializers del padre cuando no define ninguno propio o cuando implementa todos los designated initializers del padre. En otro caso, debe hacerlo explícitamente con override init:
class Base {
var valor: Int
init(valor: Int) { self.valor = valor }
convenience init() { self.init(valor: 0) }
}
class Derivada: Base {
var extra: String
override init(valor: Int) {
self.extra = "default"
super.init(valor: valor)
}
// hereda convenience init() automaticamente
}
let d = Derivada() // valor=0, extra="default"
