我有返回 NSNumber 的信号:
RACSignal *signal = ....
然后在代码的某个地方,我想在执行时获取信号的值,例如:
NSNumber *value = [code that extracts current value of signal];
我有返回 NSNumber 的信号:
RACSignal *signal = ....
然后在代码的某个地方,我想在执行时获取信号的值,例如:
NSNumber *value = [code that extracts current value of signal];
这些-subscribe...
方法使您可以访问信号中的当前值和未来值:
[signal subscribeNext:^(id x) {
NSLog(@"Current value = %@", x);
}];
另一种方式:如果您想将此值与其他值一起使用 - 使用combineLatest:reduce:
如下方法:
RACSignal *calculationWithCurrentValueSignal =
[RACSignal combineLatest:@[signalWithCurrentValueThatNeeded, anotherSignal]
reduce:^id(NSNumber *myCurrentValue, NSNumber *valueFromAnotherSignal) {
//do your calculations with this values..
return newValue;
}];
答案对 Swift 版本也有效吗?
对观察对象属性变化的 SignalPipe 进行成像。当订阅来自其他几个对象的信号时,即queue.queueCountSignal.observeNext({...})
,观察块将在下次属性更改时执行。有没有办法询问当前值或触发observeNextBlock?
我不想使用 SignalProducer(可以显式启动),因为这意味着我需要observeNext
从每个需要信号的对象中收集块。我也不想为同一件事创建多个信号生成器——或者这实际上是想要的吗?
这是使示例代码更清晰的示例
import ReactiveCocoa
class SwipingQueueWithSignals<T> : SwipingQueue<T> {
override var count: Int {
didSet(oldQueueCount) {
let newQueueCount = self.count
queueCountSignalObserver.sendNext(newQueueCount)
}
let queueCountSignal: Signal<Int, NoError>
private let queueCountSignalObserver: Observer<Int, NoError>
init() {
(self.queueCountSignal, self.queueCountSignalObserver) = Signal<Int, NoError>.pipe()
super.init()
}
}
// Something like this
queue.queueCountSignal.
.observeNext { next in print(next) }
.lookupCurrentValueNow()