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

Ani*_*ale 3 swift rx-swift rx-cocoa

我有3个按钮

@IBOutlet weak var editGeomButton: UIButton! // 1
@IBOutlet weak var editDataButton: UIButton! // 2
@IBOutlet weak var deleteDataButton: UIButton! // 3
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

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

Val*_*ian 7

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

\n\n
enum Actions {\n  case editGeom\n  case editData\n  case deleteGeom\n}\n\nObservable.merge(\n  editGeomButton.rx.tap.map {\xc2\xa0_ in Actions.editGeom },\n  editDataButton.rx.tap.map { _ in Actions.editData },\n  deleteDataButton.rx.tap.map { _ in Actions.deleteGeom }\n).subscribe(onNext: {\n  switch $0 {\n  case .editGeom:\n    print("Did tap Edit Geom")\n  case .editData:\n    print("Did tap Edit Data")\n  case .deleteGeom:\n    print("Did tap Delete geom")\n  }\n}).disposed(by: disposeBag)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n