Rxswift отменить наблюдателя, когда даже произойдет, и переписать - PullRequest
0 голосов
/ 08 октября 2018

Привет, кто-нибудь знает, как отменить наблюдаемое, когда событие происходит, и повторно подписаться (в основном, я хочу, чтобы наблюдаемое пропустило излучение, когда происходит другое событие (нажатие кнопки «Отмена»)

Подробный сценарий: кнопка «Отмена» нажимается наUISearchBar как сделать видимым паузу и прекратить излучение, даже когда нажата кнопка «Отмена»

Я думаю о чем-то вроде этого:

Observable.of(searchClick,historyClick).merge().debounce(0.3, scheduler: scheduler)
                    .takeUntil(searchBar.rx.cancelButtonClicked)
                    .bind(to: viewModel.search)
                    .disposed(by: disposeBag)

, но после этого подписка останавливается.Как мы можем повторно подписаться или каким-либо другим способом пропустить излучение, когда даже произойдет?

1 Ответ

0 голосов
/ 08 октября 2018

Полагаю, лучше перейти к следующей наблюдаемой (которая может быть неактивной во время переключения) с помощью оператора ' .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)'
...