合并UIBarButtonItem tap和UIView tapGesture()的Observable

时间:2017-10-29 12:09:26

标签: ios rx-swift rx-cocoa

我有两个相同动作的来源。 UIBarButtonItem中的常规RxCocoa点击:

browseButton.rx.tap

UIView中的RxGesture点击手势识别器:

notConnectedView.rx.tapGesture().when(.recognized)

我按照通常的方式订阅它:

<any_of_the_observables>
    .subscribe(onNext: {
        // Do things
    }).disposed(by: disposeBag)

这适用于两个observable,现在我想合并但无法实现它。因为它们是两个不同事件的可观察事件merge不起作用。

Observable.of(notConnectedView.rx.tapGesture().when(.recognized), browseButton.rx.tap)
  

输入'inout UIView'不符合协议'ReactiveCompatible'

有可能做到这一点吗?感谢。

1 个答案:

答案 0 :(得分:1)

您应该获得相同的事件类型,例如将两个事件都转换为void:

let buttonItemTap = item.rx.tap.map { _ in return () }
let viewTap: Observable<Void> = v.rx.tapGesture().when(.recognized).map { _ in return () }

Observable.of(buttonItemTap, viewTap).merge()
    .subscribe(onNext: { (_) in
        print("tapped")
    }).disposed(by: disposeBag)