gpt4 book ai didi

swift - RAC3 中 MutableProperty 的多个观察者

转载 作者:行者123 更新时间:2023-11-28 09:01:14 25 4
gpt4 key购买 nike

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

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

这样的属性
let documentUpdateSignal: Signal<Int,NSError>

let remainingDocuments = MutableProperty<Int>(0)

然后尝试在 init 上用我的可变属性的生产者启动它像

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

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

我也曾尝试创建一个返回 Signal 的方法,但运气不佳,而不是一个属性……就像这样,尽管它看起来不太正确。

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
}

不过,我不确定您能否从类的 init() 中调用 startWithSignal,因为 selfsuper 的 init 被调用之前,不能被 block 捕获。鉴于此,我假设 documentUpdateSignal 是可选的。

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

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

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

关于swift - RAC3 中 MutableProperty 的多个观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31975383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com