将 3 个按钮的点击事件与 rxSwift 相结合
Posted
技术标签:
【中文标题】将 3 个按钮的点击事件与 rxSwift 相结合【英文标题】:combining tap event of 3 buttons with rxSwift 【发布时间】:2019-09-16 06:31:06 【问题描述】:我有 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 方法的代码?我认为这可以使用组合运算符来实现。但我不明白如何编码。
【问题讨论】:
【参考方案1】:我会使用枚举来避免默认情况:
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 $0
case .editGeom:
print("Did tap Edit Geom")
case .editData:
print("Did tap Edit Data")
case .deleteGeom:
print("Did tap Delete geom")
).disposed(by: disposeBag)
基本上,它只是将每个点击映射到一个值,然后再将它们合并在一起。
【讨论】:
使用 Action 类型的绝佳模式,感觉就像 Redux。以上是关于将 3 个按钮的点击事件与 rxSwift 相结合的主要内容,如果未能解决你的问题,请参考以下文章