首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bond/ReactiveKit -暂时暂停观察事件,然后重新开始观察(但看到错过的事件)

Bond/ReactiveKit -暂时暂停观察事件,然后重新开始观察(但看到错过的事件)
EN

Stack Overflow用户
提问于 2017-01-15 23:39:26
回答 1查看 474关注 0票数 1

我开始使用Bond在应用程序中实现一个基本的MVVM模式,并且有一个场景,我想暂时挂起对Observable上事件的观察(通过一个标志)。

然后,我想恢复对事件的观察,但也想“重播/重放”在暂停期间可能错过的事件给我的观察员。

我已经在一个pausable(by:)上找到了Observable函数,它可以很好地暂停对事件的观察,但是我不知道如何在重新启用观察之后“重放/重新发送”任何事件。

我试图做的一个简单的例子是:-

  • 最初将viewModel.message的值设置为“原始值”
  • viewDidLoad上,将viewModel.message绑定到label文本,但允许将其暂停。
  • 在UI上有一些将的按钮
    • 更改消息值(changeMessageButton)
    • 停止更新标签文本(stopChangingLabelTextButton)
    • 再次开始更新标签文本(startChangingLabelTextButton)

代码:-

代码语言:javascript
复制
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")
}

解决这个问题的最好方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-17 07:45:13

是的,在暂停状态期间,pausable将忽略和忽略事件。如果您可以只重放最新的值,您可以像这样平面映射shouldUpdate

代码语言:javascript
复制
shouldUpdate.flatMapLatest { shouldUpdate -> SafeSignal<String> in 
    if shouldUpdate {
      return viewModel.message.toSignal()
    } else {
      return .never()
    }
}.bind(to: label.bnd_text)

每当shouldUpdate发出一个事件时,它要么开始传播viewModel.message,要么什么也不传播。每当它开始传播viewModel.message时,它也会收到最新的值,因为可观察的总是向新的观察者重放最近的值。

请确保你做了import ReactiveKit

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41667586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档