Как наблюдать за изменениями свойств массива в RxSwift
вот мой класс:
class ViewController: UIViewController {
var myArray : NSArray!
}
Я хочу запускать событие каждый раз, когда myArray указывает на новый массив, например:
self.myArray = ["a"]
self.myArray = ["b"]
Я пробовал rx_observe, но не удалось, вот мой код:
self.rx_observe(NSArray.self, "myArray").subscribeNext { (array) -> Void in
print(array)
}
он срабатывает только в первый раз, в чем проблема?
1 ответов
большую часть времени, если у вас есть контроль над переменной поддержку, вы предпочтете Variable
С использованием rx_observe
.
class ViewController: UIViewController {
var myArray : Variable<NSArray>!
}
в первый раз, когда вы будете использовать myArray, вы бы asign его так
myArray = Variable(["a"])
затем, если вы хотите изменить его значение
myArray.value = ["b"]
и вы можете легко наблюдать его изменения, используя
myArray.asObservable().subscribeNext { value in
// ...
}
если вы действительно хотите использовать rx_observe
(возможно, потому, что переменная используется в другом месте вашей программы, и вы не хотите менять API вашего контроллера вида), вам нужно будет объявить myArray
as dynamic
(другое требование заключается в том, что класс хостинга является дочерним NSObject
здесь UIViewController
удовлетворяет этому требованию). KVO не реализован по умолчанию в swift, и использование dynamic гарантирует, что доступ осуществляется с помощью среды выполнения objective-c, где обрабатываются события KVO.
class ViewController: UIViewController {
dynamic var myArray: NSArray!
}
документация для этого можно найти здесь