合并 UIBarButtonItem tap 和 UIView tapGesture() 的 Observables

Merge Observables of UIBarButtonItem tap and UIView tapGesture()

同一个动作我有两个来源。 UIBarButtonItem:

中的常规 RxCocoa 水龙头
browseButton.rx.tap

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

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

我按常规方式订阅:

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

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

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

Type 'inout UIView' does not conform to protocol 'ReactiveCompatible'

这个可以做吗?谢谢。

您应该获得相同的事件类型,例如将两个事件都转换为 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)