swift key-value-observing swift4

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 .)