我正在尝试包装一个在网络请求后初始化对象的 API 调用。我不希望每个新观察者都发生网络请求,所以据我了解,我不应该使用SignalProducer
. 但是,通过使用单个Signal
,只有第一次使用它会收到一个next
事件,而任何较新的订阅者将永远不会收到当前值。我应该怎么做?我可能对 RAC 做了一些根本性的错误。
extension SparkDevice {
static func createMainDeviceSignal() -> Signal<SparkDevice, NSError> {
return Signal {
sink in
SparkCloud.sharedInstance().getDevices { (sparkDevices: [AnyObject]!, error: NSError!) -> Void in
if let error = error {
sink.sendFailed(error)
}
else {
if let devices = sparkDevices as? [SparkDevice] {
if devices.count > 0 {
sink.sendNext(devices[0])
}
}
}
}
return nil
}
}
}
class DeviceAccess {
let deviceSignal: Signal<SparkDevice, NSError>
init() {
self.deviceSignal = SparkDevice.createMainDeviceSignal()
}
}
我考虑过使用MutableProperty
,但这似乎需要一个默认属性,这似乎没有意义。
我应该怎么做呢?