将 3 个按钮的点击事件与 rxSwift 相结合

combining tap event of 3 buttons with rxSwift

我有 3 个按钮

@IBOutlet weak var editGeomButton: UIButton! // 1
@IBOutlet weak var editDataButton: UIButton! // 2
@IBOutlet weak var deleteDataButton: UIButton! // 3

单击任何此按钮后,我希望调用以下方法。用正确的数字。

func didTap() -> Observable<Int> {

}

didTap().subscribe(onNext: { (tag) in
    switch tag {
    case 1:
        print("Did tap Edit Geom")
    case 2:
        print("Did tap Edit Data")
    case 3:
        print("Did tap Delete geom")
    default:
        print("Invalid tap")
    }
}).disposed(by: disposeBag)

请帮忙写下使用 Observable 的 didTap 方法的代码?我认为这可以使用组合运算符来实现。但是我不明白如何编码。

我会使用枚举来避免默认情况:

enum Actions {
  case editGeom
  case editData
  case deleteGeom
}

Observable.merge(
  editGeomButton.rx.tap.map { _ in Actions.editGeom },
  editDataButton.rx.tap.map { _ in Actions.editData },
  deleteDataButton.rx.tap.map { _ in Actions.deleteGeom }
).subscribe(onNext: {
  switch [=10=] {
  case .editGeom:
    print("Did tap Edit Geom")
  case .editData:
    print("Did tap Edit Data")
  case .deleteGeom:
    print("Did tap Delete geom")
  }
}).disposed(by: disposeBag)

基本上,它只是将每个点击映射到一个值,然后再将它们合并在一起。