2016-03-03 101 views
6

这里数组属性的变化是我的课:如何观察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) 
} 

它只是第一次启动,有什么问题?

回答

11

大多数情况下,如果您拥有对后备变量的控制权,则宁愿使用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),则需要声明myArraydynamic(另一个要求是托管班是NSObject的孩子,这里的UIViewController满足这个要求)。 KVO在swift中并未默认实现,并且使用动态确保访问是使用处理KVO事件的objective-c运行时完成的。此

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

文档可以发现here