Wie zu beobachten Bool Eigenschaften mit RxSwift?
Habe ich zwei Bool-Eigenschaften in meinem VC.swift:
var isRecording = false
var isPlaying = false
In die viewDidLoad() Methode habe ich diesen code:
let observable = Observable.combineLatest(self.rx_observe(Bool.self, "isRecording"), self.rx_observe(Bool.self, "isPlaying")) { (val1, val2) -> Void in
if(val1 == false && val2 == false){
self.recordButton.enabled = true
self.playButton.enabled = true
self.recordButton.setImage(UIImage(named: "record"), forState: UIControlState.Normal)
self.playButton.setImage(UIImage(named: "play"), forState: UIControlState.Normal)
} else if(val1 == true && val2 == false){
self.recordButton.enabled = true
self.recordButton.setImage(UIImage(named: "stop"), forState: UIControlState.Normal)
self.playButton.enabled = false
} else if(val1 == false && val2 == true){
self.recordButton.enabled = false
self.playButton.enabled = true
self.playButton.setImage(UIImage(named: "stop"), forState: UIControlState.Normal)
self.recordButton.setImage(UIImage(named: "record"), forState: UIControlState.Normal)
}
}.observeOn(MainScheduler.instance)
addSubscription(observable.subscribe())
Die Funktion addSubscription(:_) fügt Abonnement DisposableBag.
Das problem ist, dass der code im Verschluss nur einmal funktioniert. Es funktioniert nicht, wenn die Eigenschaften "isRecording" und "isPlaying" ändern. Was soll ich tun, wenn ich diese code ausgeführt werden, nachdem ich diese bool-Eigenschaften geändert?
- Ändern Sie die Eigenschaften, wenn der status geändert wird, ich bedeutet, das Spiel oder die Aufzeichnung wird beendet und wieder neu starten. Sie setzte es in viewdidload-es ist also nur einmal aufgerufen, wenn es lädt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht verwenden
Bool
undrx_observe
. Verwenden Sie stattdessen eineSubject
wieVariable<Bool>
.Aber, um Ihre Frage zu beantworten, warum es nicht funktioniert mit
rx_observe
weilrx_observe
beruht auf der Eigenschaft, die KVO konform sind. Wenn Sie diedynamic
Schlüsselwort vor Ihrem Grundstück Definitionen, es würde gearbeitet haben:dynamic var isRecording = false
. Jedoch, Sie sollten wirklich mit einemSubject
wieVariable
. Überprüfen Sie heraus die Spielplatz-Seite der Umgang mitSubject
s in derRxSwift
repo. Es gibt jeweils ein Beispiel geben.