1

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

我想让我的 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()
}

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

我还尝试创建一个方法,该方法返回一个没有太多运气的信号,而不是一个属性……即使它看起来不太正确。

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

很想帮忙 非常感谢!

4

1 回答 1

0

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

var documentUpdateSignal: Signal<Int, NoError>?

....

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

不过,我不确定您是否可以startWithSignal从您的班级中调用' init(),因为在调用 'initself之前,该块不可用于捕获。super鉴于此,我假设documentUpdateSignal是可选的。

请注意,我还更改了documentUpdateSignalfrom using NSErrorto的声明NoError以适合MutableProperty's producer's 签名。

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

self.documentUpdateSignal?.observe(next: { 
                (var value: Int) in
                println("Mutable property = \(value)")
            }
        )
于 2015-09-23T04:22:19.247 回答