Я начинаю использовать Bond для реализации базового шаблона MVVM в приложении и иметь сценарий, в котором я хотел бы временно приостановить наблюдение за событиями на Observable
(через флаг).Bond/ReactiveKit - временно приостановить наблюдения и снова начать наблюдение (но просмотреть события, которые были упущены)
Я бы хотел возобновить наблюдение за событиями, но также хочу «повторить/отправить» события моим наблюдателям, которые, возможно, были пропущены во время периода приостановки.
Я нашел функцию pausable(by:)
на Observable
, которая хорошо работает для временного приостановления наблюдения за событиями, но я не уверен, как «переигрывать/повторять» любые события после повторного включения наблюдения.
урезанный пример того, что я пытаюсь сделать это: -
- Изначально установлено значение
viewModel.message
быть «Original Value» - На
viewDidLoad
связываютviewModel.message
к текстуlabel
, но позвольте ему быть правдоподобным. - На пользовательском интерфейсе есть кнопки, которые будут
- Измените значение сообщения (
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")
}
Что было бы лучшим способом справиться с этим?
Спасибо за указатель - это именно то, что я искал! –