Можно ли связать двух наблюдателей одновременно? - PullRequest
1 голос
/ 05 июня 2019

Как:

btn.rx.tap
   .bind(to: ViewA.rx.isHidden && ViewB.rx.isHidden)
   .disposed(by: disposeBag)

так что, как только я нажму btn, ViewA и ViewB оба спрятаны одновременно! это возможно?

Ответы [ 3 ]

1 голос
/ 05 июня 2019

Нет реальной необходимости в промежуточном BehaviorRelay, как в ответе SaikOs.Просто свяжись дважды:

btn.rx.tap
   .bind(to: ViewA.rx.isHidden)
   .disposed(by: disposeBag)

btn.rx.tap
   .bind(to: ViewB.rx.isHidden)
   .disposed(by: disposeBag)
1 голос
/ 06 июня 2019

С RxSwift 5 вы можете сделать это почти так, как вы думали:

button.rx.tap
    .map { true }
    .bind(to: viewA.rx.isHidden, viewB.rx.isHidden)
    .disposed(by: bag)
1 голос
/ 05 июня 2019

isHidden требуется Bool, поэтому сначала вам нужно конвертировать tap в Bool.Отвечая на ваш вопрос - вот что вы можете сделать:

btn.rx.tap
    .map { _ in true }
    .bind(onNext: { value in
        ViewA.isHidden = value
        ViewB.isHidden = value
    }).disposed(by: disposeBag)

или

let hiddenStatus = BehaviorRelay(value: false)

btn.rx.tap
    .map { _ in true }
    .bind(to: hiddenStatus)
    .disposed(by: disposeBag)

hiddenStatus.bind(to: ViewA.rx.isHidden).disposed(by: disposeBag)
hiddenStatus.bind(to: ViewB.rx.isHidden).disposed(by: disposeBag)

...