2016-03-03 201 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