swift - puede - como enloquecer de amor a un hombre
¿Cómo satisfacer un protocolo que incluye un inicializador? (1)
Definí una clase simple:
class MyClass {
var name:String?
required init() {
println("init")
}
}
Puedo agregar un nuevo inicializador en una extensión como esta:
extension MyClass {
convenience init(name: String) {
self.init()
self.name = name
}
}
Todo funciona bien.
Pero tan pronto como defino el nuevo inicializador en un protocolo:
protocol MyProtocol {
init(name:String)
}
Y hacer que mi extensión confirme a ese protocolo:
extension MyClass : MyProtocol {
convenience init(name: String) {
self.init()
self.name = name
}
}
Obtuve el siguiente error:
El requisito de inicializador ''init (nombre :)'' solo se puede cumplir con un inicializador
required
en la definición de la clase no final ''MyClass''
¿Que esta pasando aqui?
(Por cierto: no puedo llegar a la final
mi clase, porque esto es solo el extracto de un caso de uso más complicado).
Ok mio
Para garantizar que todas las subclases se ajustan a MyProtocol
nuevo inicializador también debe marcarse como sea required
.
Además, Swift requiere declarar todos los inicializadores requeridos directamente dentro de la clase y no permite declararlos en extensiones.
extension MyClass : MyProtocol {
required convenience init(name: String) {
self.init()
self.name = name
}
}