NSNumber を返すシグナルがあります。
RACSignal *signal = ....
次に、コードのどこかで、実行の瞬間にシグナルの値を取得したいのですが、次のようなものです。
NSNumber *value = [code that extracts current value of signal];
NSNumber を返すシグナルがあります。
RACSignal *signal = ....
次に、コードのどこかで、実行の瞬間にシグナルの値を取得したいのですが、次のようなものです。
NSNumber *value = [code that extracts current value of signal];
シグナルには「現在の」値の概念がありません。値は送信され、その後消えます — それらは非常に一時的なものです (リプレイ サブジェクトまたは他のトリックが使用されない限り)。
おそらく、そのシグナルにサブスクライブしたいと思うでしょう。より詳細な説明については、フレームワークの概要と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()