2016-03-03 15 views
6

Oto moja klasa:Jak obserwować zmiany własności tablica w RxSwift

class ViewController: UIViewController { 
    var myArray : NSArray! 
} 

Chcę zwolnić zdarzenie za każdym razem MyArray punktów do nowej tablicy, tak:

self.myArray = ["a"] 

self.myArray = ["b"] 

I Wcześniej próbował rx_observe ale nie, tutaj jest mój kod:

self.rx_observe(NSArray.self, "myArray").subscribeNext { (array) -> Void in 
    print(array) 
} 

to tylko odpala za pierwszym razem, to w czym problem?

Odpowiedz

11

W większości przypadków, jeśli masz kontrolę nad zmienną wspierającą, wolisz Variable do używania rx_observe.

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

Pierwszy raz użyjesz myArray, byś asign to jak tak

myArray = Variable(["a"]) 

Następnie, jeśli chcesz zmienić jego wartość

myArray.value = ["b"] 

I można łatwo zaobserwować jego zmiany, przy użyciu


Jeśli naprawdę chcesz użyć rx_observe (może dlatego, że zmienna jest używana w innym miejscu w twoim programie i nie chcesz zmieniać interfejsu API kontrolera widoku), musisz zadeklarować myArray jako dynamic (inne wymaganie to że klasa hostingu jest dzieckiem o numerze NSObject, tutaj UIViewController spełnia to wymaganie). KVO nie jest domyślnie zaimplementowany w trybie swift, a korzystanie z dynamicznego zapewnia dostęp odbywa się za pomocą środowiska wykonawczego Object-c, w którym obsługiwane są zdarzenia KVO.

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

Dokumentacja na ten temat można znaleźć here

Powiązane problemy