type - Swift observador de propiedad en la extensión de protocolo?
swift protocol and delegate example (1)
No, esto está explícitamente prohibido. Ver extensión: Propiedades calculadas :
Las extensiones pueden agregar nuevas propiedades calculadas, pero no pueden agregar propiedades almacenadas ni agregar observadores de propiedades a las propiedades existentes.
Tenga en cuenta que si esto fuera legal, agregaría una confusión no trivial sobre el orden de ejecución. Imagine que hay varias extensiones que agregan didSet
, y la implementación real también tiene un didSet
. ¿En qué orden deberían correr? Esto no significa que sea imposible de implementar, pero podría ser algo sorprendente si lo tuviéramos.
Considera lo siguiente:
protocol ViewControllable: class {
typealias VM: ViewModellable
var vm: VM! { get }
func bind()
}
extension ViewControllable {
var vm: VM! {
didSet {
bind()
}
}
}
Estoy tratando de observar la propiedad vm
y llamar a bind
cada vez que se inyecta. Pero esto no se compila con el error que dice:
Las extensiones pueden no contener propiedades almacenadas
lo cual tiene sentido ya que el protocolo no puede imponer las propiedades que se stored
o computed
.
¿Es esto posible sin introducir class inheritance
?
En otras palabras, ¿Puedo observar el cambio de una propiedad dentro de la extensión del protocolo?