是否可以一次绑定两个观察者?

时间:2019-06-05 11:15:20

标签: ios rx-swift

赞:

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

因此,一旦我点击btn,ViewA和ViewB都立即隐藏! 有可能吗?

3 个答案:

答案 0 :(得分:1)

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)

答案 1 :(得分:1)

与SaikOs答案一样,实际上不需要中间BehaviorRelay。只需绑定两次:

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

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

答案 2 :(得分:1)

使用RxSwift 5,您几乎可以按照您认为的方式进行操作:

button.rx.tap
    .map { true }
    .bind(to: viewA.rx.isHidden, viewB.rx.isHidden)
    .disposed(by: bag)