我开始使用 Bond 在应用程序中实现基本的 MVVM 模式,并且有一个场景,我想暂时暂停对事件的观察Observable
(通过标志)。
然后,我想恢复对事件的观察,但也想将在暂停期间可能错过的事件“重播/重新发送”给我的观察者。
我发现该pausable(by:)
功能Observable
适用于临时暂停事件的观察,但不确定在重新启用观察后如何“重播/重新发送”任何事件。
我正在尝试做的一个简化示例是这样的:-
- 最初将值设置
viewModel.message
为“原始值” viewDidLoad
绑定到viewModel.message
的文本label
,但允许它暂停。- 在 UI 上有一些按钮可以
- 更改消息 (
changeMessageButton
)的值 - 停止更新标签文本 (
stopChangingLabelTextButton
) - 再次开始更新标签文本 (
startChangingLabelTextButton
)
- 更改消息 (
代码 :-
class MyViewController: UIViewController {
let viewModel = MyViewModel()
let shouldUpdate = Observable(true)
@IBOutlet weak var label: UILabel!
@IBOutlet weak var changeMessageButton: UIButton!
@IBOutlet weak var stopChangingLabelTextButton: UIButton!
@IBOutlet weak var startChangingLabelTextButton: UIButton!
override func viewDidLoad() {
viewModel.message.pausable(by: shouldUpdate).bind(to: label.bnd_text)
changeMessageButton.bnd_tap.observe { _ in
viewModel.message.value = "Changing Message"
}
stopChangingLabelTextButton.bnd_tap.observe { _ in
shouldUpdate.value = false
}
startChangingLabelTextButton.bnd_tap.observe { _ in
shouldUpdate.value = true
// DO SOMETHING TO BE ABLE TO "REPLAY/RESEND" ANY EVENTS TO viewmodel.message
}
}
}
class MyViewModel {
let message = Observable<String>("Original Value")
}
解决这个问题的最佳方法是什么?