En Swift 4, ¿cómo elimino un observador KVO basado en bloques?
key-value-observing swift4 (1)
Si guardo un observador como este:
let observer: NSKeyValueObservation = foo.observe(/.value, options: [.new]) { (foo, change) in
print(change.newValue)
}
¿Cómo elimino / deshabilito / limpia el observer
una vez que ya no lo necesito?
Mi instancia de foo
no tiene ningún método de remove
tipo que reciba una instancia de NSKeyValueObservation
, el observer
sí tampoco tiene ninguna remove
tipo.
En iOS 11, no tienes que hacerlo. Solo deja que el observador salga de alcance. Ya no hay penalización por dejar que un observador muera antes de lo observado o por dejar que lo observado muera antes que el observador, por lo que no tiene trabajo que hacer.
Por otro lado, si realmente desea cancelar el registro del observador, elimínelo de cualquier cosa que lo retenga o pídale que lo invalidate
. (Algo debe retenerlo, porque si no persistes en el observador, morirá y nunca se llamará a tu función de observador).
(Dice "si almaceno un observador como este", pero la forma en que lo está almacenando, con let
, es una forma un tanto tonta de almacenar el observador. Sería mejor colocarlo en un Set del que pueda eliminarlo más tarde, o al menos guárdelo en una var
Opcional que luego puede establecer en nil
.)