如何获取在 RxSwift 中单击了哪个按钮

Rav*_*iya 5 ios swift rx-swift

我为我的按钮数组创建了一个通用操作。我只想知道点击了哪个按钮。

我有像let buttons = [UIButton(), UIButton(), UIButton(),UIButton()].

let observable = Observable.of(buttons[0].rx.tap, buttons[1].rx.tap, buttons[2].rx.tap, buttons[3].rx.tap).merge()
    observable.subscribe(onNext: {
      print("I want to find which button is tapped.")
    }).disposed(by: disposeBag)
Run Code Online (Sandbox Code Playgroud)

Dan*_* T. 3

正确的答案是首先不要合并按钮。如果你想做四件不同的事情,那么就有四个不同的可观察量。如果他们都在做同样的事情,只是使用不同的数据,那么简单地说:

let taps = buttons.enumerated().map { ($0.0, $0.1.rx.tap) }
let toInts = taps.map { index, obs in obs.map { index } }
let mergedTaps = Observable.merge(toInts)
Run Code Online (Sandbox Code Playgroud)

经过审查,我真的很喜欢@Sooraj_snr 的答案,该答案已被删除。使用按钮的标签而不是它们在数组中的位置。它更加坚固。

let tags = buttons
    .map { ($0.rx.tap, $0.tag) }
    .map { obs, tag in obs.map { tag } }
let values = Observable.merge(tags)
Run Code Online (Sandbox Code Playgroud)