如何在 RxSwift 中观察数组 属性 的变化

How to observe array property changes in RxSwift

这是我的class:

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

只在第一次触发,有什么问题吗?

大多数时候,如果您可以控制支持变量,您会更喜欢 Variable 而不是使用 rx_observe

class ViewController: UIViewController {
   var myArray : Variable<NSArray>!
}

第一次使用 myArray 时,您会像这样分配它

myArray = Variable(["a"])

那么,如果你想改变它的值

myArray.value = ["b"]

并且你可以很容易地观察到它的变化,使用

myArray.asObservable().subscribeNext { value in
  // ...
}

如果你真的想使用rx_observe(可能是因为变量在你程序的其他地方使用,你不想改变你的视图控制器的API),你需要将 myArray 声明为 dynamic(另一个要求是托管 class 是 NSObject 的子级,这里 UIViewController 满足此要求)。 KVO 在 swift 中默认未实现,使用动态确保访问是使用 objective-c 运行时完成的,KVO 事件在该运行时处理。

class ViewController: UIViewController {
  dynamic var myArray: NSArray!
}

可找到相关文档here