Понимание наблюдаемой цепи RxSwift - PullRequest
0 голосов
/ 03 января 2019

Это моя упрощенная версия моего кода:

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?

...