0

对于同一个动作,我有两个来源。a 中的常规 RxCocoa 水龙头UIBarButtonItem

browseButton.rx.tap

和一个 RxGesture 轻击手势识别器UIView

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

我以通常的方式订阅它:

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

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

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

类型“inout UIView”不符合协议“ReactiveCompatible”

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

4

1 回答 1

2

您应该获得相同的事件类型,例如将两个事件都转换为 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)
于 2017-10-29T12:28:16.670 回答