【发布时间】:2017-01-15 23:39:26
【问题描述】:
我开始使用 Bond 在应用程序中实现基本的 MVVM 模式,并且有一个场景,我想暂时暂停观察 Observable 上的事件(通过标志)。
然后我想恢复对事件的观察,但也想向我的观察者“重播/重新发送”在暂停期间可能错过的事件。
我在 Observable 上找到了 pausable(by:) 函数,该函数非常适合临时暂停对事件的观察,但我不确定在重新启用观察后如何“重播/重新发送”任何事件。
我正在尝试做的一个简化示例是这样的:-
- 最初将
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")
}
解决这个问题的最佳方法是什么?
【问题讨论】:
标签: swift mvvm reactivekit