RxSwift:将 PublishSubject 绑定到多个按钮并接收发送者

Posted

技术标签:

【中文标题】RxSwift:将 PublishSubject 绑定到多个按钮并接收发送者【英文标题】:RxSwift: binding PublishSubject to multiple buttons and receive sender 【发布时间】:2017-03-23 07:47:09 【问题描述】:

我正在开发一个显示 26 个(字母)按钮的应用程序。现在它们都连接到ViewController 中的同一个函数,然后调用ViewModel 中的另一个函数,最后这个函数调用publishSubject.onNext()ViewController 订阅了PublishSubject,这就是整个圈子。

我这样做的原因不是将发布主题绑定到按钮的点击,而是我必须知道发件人是谁。反正有这样做吗?如果没有,还有比我头脑中更智能的设计吗?

谢谢!

【问题讨论】:

如果我理解你的设计,你可以使用这样的过滤器$0 == "A" 过滤什么流?什么是 0 美元?我需要 ViewModel 知道在 ViewController 中按下了什么按钮,这就是问题所在:) 我认为您需要添加一些代码让我理解问题 【参考方案1】:

您可以让PublishSubject 发送String,然后每次点击按钮时,您可以发送按钮的标题作为事件数据。

publishSubject.onNext(sender.title)

这样您就可以将发件人与ViewModel 区分开来,并保留您当前的设计。

更新:

再次阅读您的问题后,我意识到您正在尝试实现比您目前拥有的更具反应性的方式。因此,与其从所有按钮中拉出IBActions,不如让IBOutletsviewDidLoad 将所有这些按钮绑定到PublishSubject。像这样的:

aButton
   .rx
   .tap.map  _ in 
      aButton.title
   
   .bindTo(viewModel.buttonTapped)
   .disposed(by:disposeBag)

【讨论】:

谢谢!正是我需要的!

以上是关于RxSwift:将 PublishSubject 绑定到多个按钮并接收发送者的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift PublishSubject 单元测试

RxSwift 中的 PublishSubject 和 PublishRelay 有啥区别?

RxSwift - PublishSubject - 忽略错误并继续订阅(不要处置)

正在处理 RxSwift PublishSubject

在 RxSwift PublishSubject 上完成后订阅最后一个值

RxSwift 系列