Rxswift在偶发事件发生时取消观察者并重新订阅

时间:2018-10-08 07:43:21

标签: ios swift observable rx-swift

嗨,有人知道如何在偶发事件发生时取消可观察对象并重新订阅(基本上,我希望当另一个事件发生时(取消按钮点击),可观察对象跳过发射

详细情况:在href上单击“取消”按钮,即使单击“取消”按钮,如何也可以观察到暂停和停止发射

我在想这样的事情:

UISearchBar

,但此后停止订阅。发生偶发事件时,我们如何重新订阅或以其他任何方式跳过发射?

1 个答案:

答案 0 :(得分:0)

我想最好使用' .switchLatest()'运算符切换到下一个可观察到的(可能在切换时处于休眠状态)。

let eventSwitch: BehaviorSubject<Observable<T>> = BehaviorSubject.create(/*initial value*/) // where T is your type of choice
let events = eventSwitch.switchLatest() // subscribe consumer to this
eventSwitch.onNext(/*new event source of type Observable<T>*/) // call this from "Cancel" button

更新

let eventSwitch = BehaviorSubject(value: Observable
    .of(searchClick,historyClick)
    .merge()
    .debounce(0.3, scheduler: scheduler)
  )
let events = eventSwitch.switchLatest()

events
  .bind(to: viewModel.search)
  .disposed(by: disposeBag)

// call this from "Cancel" button
eventSwitch.onNext(...)
// argument can be empty observable or 'Observable.of(searchClick,historyClick).merge().debounce(0.3, scheduler: scheduler)'