RAC3 中 MutableProperty 的多个观察者

Multiple observers of a MutableProperty in RAC3

我有一个 "DataManager" 单例 class 使用 RAC3 处理我的应用程序的状态。它包含多个 MutablePropertys,我在不同的位置开始和观察。

我想让我的 DataManager 启动或创建一个信号,我可以使用我的 DataManager 单例在任何视图控制器中观察到,使用 observe() 而不是 start() 等。但我被卡住了我不确定如何在我的 DataManager 中初始化这个信号。我试过定义一个 属性 像

let documentUpdateSignal: Signal<Int,NSError>

let remainingDocuments = MutableProperty<Int>(0)

然后尝试在初始化时使用我的可变 属性 生产者启动它 像

override init() {
  documentUpdateSignal = remainingDocuments.producer.start(next: {
    docs in
    println("doc count \(docs)")
  })
  super.init()
}

但这不起作用,因为它不 return Signal<Int,NSError>

我也曾尝试创建一个 return 信号的方法,但运气不佳,而不是 属性... 像这样,尽管它看起来不太正确。

func updateSignal() -> Signal<Int, NSError> {
  return remainingDocuments.producer
}

希望得到帮助 非常感谢!

你现在可能已经解决了这个问题:

var documentUpdateSignal: Signal<Int, NoError>?

....

remainingDocuments.producer.startWithSignal { 
            (var signal: Signal<Int, NoError>, var disposable : Disposable) -> () in
            self.documentUpdateSignal = signal
        }

不过,我不确定您能否从 class' init() 中呼叫 startWithSignal,因为 self 不适用于被块捕获,直到 super 的 init 被调用。鉴于此,我假设 documentUpdateSignal 是可选的。

请注意,我还将 documentUpdateSignal 的声明从使用 NSError 更改为 NoError 以适应 MutableProperty 制作人的签名。

然后您可以使用以下方法观察来自其他地方的信号:

self.documentUpdateSignal?.observe(next: { 
                (var value: Int) in
                println("Mutable property = \(value)")
            }
        )