RxSwift:将 PublishSubject 绑定到多个按钮并接收发送者
RxSwift: binding PublishSubject to multiple buttons and receive sender
我正在开发一个显示 26 个(字母)按钮的应用程序。现在它们都连接到 ViewController
中的同一个函数,后者又调用 ViewModel
中的另一个函数,最后这个函数调用 publishSubject.onNext()
。 ViewController
订阅了 PublishSubject
这就是整个圈子。
我之所以这样做,而不是将发布主题绑定到按钮的点击,是因为我必须知道发件人是谁。反正有这样做吗?如果没有,head中有没有比我更聪明的设计?
谢谢!
您可以让 PublishSubject
发送 String
然后每次点击按钮时,您可以发送按钮的标题作为事件数据。
publishSubject.onNext(sender.title)
这样您就可以区分发件人和 ViewModel
并保持您当前的设计。
更新:
再次阅读您的问题后,我意识到您正在尝试实现一种比您目前拥有的方式更具反应性的方式。因此,无需从所有按钮中拉出 IBActions
,您只需让 IBOutlets
并在 viewDidLoad
上将所有这些按钮绑定到 PublishSubject
。像这样:
aButton
.rx
.tap.map { _ in
aButton.title
}
.bindTo(viewModel.buttonTapped)
.disposed(by:disposeBag)
我正在开发一个显示 26 个(字母)按钮的应用程序。现在它们都连接到 ViewController
中的同一个函数,后者又调用 ViewModel
中的另一个函数,最后这个函数调用 publishSubject.onNext()
。 ViewController
订阅了 PublishSubject
这就是整个圈子。
我之所以这样做,而不是将发布主题绑定到按钮的点击,是因为我必须知道发件人是谁。反正有这样做吗?如果没有,head中有没有比我更聪明的设计?
谢谢!
您可以让 PublishSubject
发送 String
然后每次点击按钮时,您可以发送按钮的标题作为事件数据。
publishSubject.onNext(sender.title)
这样您就可以区分发件人和 ViewModel
并保持您当前的设计。
更新:
再次阅读您的问题后,我意识到您正在尝试实现一种比您目前拥有的方式更具反应性的方式。因此,无需从所有按钮中拉出 IBActions
,您只需让 IBOutlets
并在 viewDidLoad
上将所有这些按钮绑定到 PublishSubject
。像这样:
aButton
.rx
.tap.map { _ in
aButton.title
}
.bindTo(viewModel.buttonTapped)
.disposed(by:disposeBag)