2016-03-03 7 views
6

Hier ist meine Klasse zu beachten:Wie Array Eigenschaftsänderungen in RxSwift

class ViewController: UIViewController { 
    var myArray : NSArray! 
} 

Ich möchte ein Ereignis feuern jedes Mal myArray Punkte in ein neues Array, wie folgt aus:

self.myArray = ["a"] 

self.myArray = ["b"] 

I‘ habe versucht rx_observe aber nicht, hier ist mein Code:

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

Sie feuert nur das erste Mal, was ist das Problem?

Antwort

11

Die meiste Zeit, wenn Sie Kontrolle über die Unterstützung Variable haben, möchten Sie Variable zu rx_observe verwenden.

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

Das erste Mal, wenn Sie myArray verwenden werden, würden Sie es wie asign so

myArray = Variable(["a"]) 

Dann, wenn Sie seinen Wert

myArray.value = ["b"] 

ändern möchten und Sie können leicht beobachten seine Änderungen unter Verwendung von

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

Wenn Sie wirklich rx_observe verwenden möchten (vielleicht, weil die Variable an anderer Stelle in Ihrem Programm verwendet wird und Sie die API Ihres View-Controllers nicht ändern möchten), müssen Sie myArray als dynamic deklarieren (eine weitere Voraussetzung ist dass die Hosting-Klasse ein Kind von NSObject ist, erfüllt hier UIViewController diese Anforderung). KVO ist nicht standardmäßig in swift implementiert, und die Verwendung von dynamic sichert den Zugriff mithilfe der Ziel-c-Laufzeit, wobei KVO-Ereignisse behandelt werden.

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

Dokumentation hierfür gefunden werden here