如何在 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
这是我的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