我有信號返回的NSNumber:如何從ReactiveCocoa信號獲取當前值?
RACSignal *signal = ....
在一些地方的代碼,我想在執行的時刻信號的值
然後, 是這樣的:
NSNumber *value = [code that extracts current value of signal];
我有信號返回的NSNumber:如何從ReactiveCocoa信號獲取當前值?
RACSignal *signal = ....
在一些地方的代碼,我想在執行的時刻信號的值
然後, 是這樣的:
NSNumber *value = [code that extracts current value of signal];
信號都沒有的概念一個「當前」值。值被髮送,然後消失 - 它們非常短暫(除非使用重播主題或其他技巧)。
您可能想要訂閱該信號。請查看Framework Overview和examples in the README以獲得更深入的解釋。
的-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()
謝謝。只是想確定。有時候會有一種誘惑,不會將所有東西都轉換成ReactvieCocoa世界。 –
但我可以這樣做:RAC(self.number)= signal;然後在某個地方使用self.number。 –
@LeszekŻarna是的,它會用信號中的最新值更新'self.number',但它仍然依賴於_subscription_的概念。瞭解訂閱如何工作將使RAC的其餘部分更容易獲取。 –