我有一个" DataManager"使用RAC3处理我的应用程序状态的单例类。它包含多个MutableProperty
,我在不同的位置开始和观察。
我想让我的DataManager启动或创建一个信号,我可以使用我的DataManager单例在任何视图控制器中观察,使用observe()
而不是start()
等。但是我被困住了,不是确定如何在我的DataManager中初始化此信号。我尝试过定义像
let documentUpdateSignal: Signal<Int,NSError>
let remainingDocuments = MutableProperty<Int>(0)
然后尝试在init上使用我的mutable属性生产者启动它
之类的东西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
}
愿意帮忙 非常感谢!
答案 0 :(得分:0)
你现在可能已经解决了这个问题:
var documentUpdateSignal: Signal<Int, NoError>?
....
remainingDocuments.producer.startWithSignal {
(var signal: Signal<Int, NoError>, var disposable : Disposable) -> () in
self.documentUpdateSignal = signal
}
我不确定您是否可以在班级内拨打startWithSignal
电话。 init()
但是,由于self
无法被块捕获,直到super
的init被调用。鉴于此,我认为documentUpdateSignal
是可选的。
请注意,我还将documentUpdateSignal
的声明从使用NSError
改为NoError
以适应MutableProperty
的制作人的声明签名。
然后您可以使用以下方式观察来自其他地方的信号:
self.documentUpdateSignal?.observe(next: {
(var value: Int) in
println("Mutable property = \(value)")
}
)