Это моя упрощенная версия моего кода:
var myObservable: Observable<MyEnum>
var modelObservable: Observable<Model?>
myObservable = myButton.rx.tap.asSignal()
.asObservable()
.flatMapLatest {
getModel()
}.map { model in
print("this is called")
return model.prop == true ? MyEnum.first : MyEnum.second
}
func getModel() -> Observable<Model?> {
if let model = self.model.value {
return Observable.just(model)
}
createModel()
return modelObservable
}
myObservable.subscribe(onNext: { (enum) in
switch enum {
case .first:
self.presentFirst()
case .second:
self.presentSecond()
}
}).disposed(by: bag)
Я ожидал, что этот код будет означать, что всякий раз, когда происходит прикосновение к myButton, этот код будет запускаться и выводить «this вызывается», однако «this вызывается» печатается также при срабатывании myOtherObservable, даже если myButton не подключен. Почему это происходит? Это заставляет меня думать, что я не понимаю Rx. Кроме того, как мне заставить его вести себя так, чтобы он работал только при нажатии myButton?