5

NSNumber を返すシグナルがあります。

RACSignal *signal = ....

次に、コードのどこかで、実行の瞬間にシグナルの値を取得したいのですが、次のようなものです。

NSNumber *value = [code that extracts current value of signal];
4

3 に答える 3

6

シグナルには「現在の」値の概念がありません。値は送信され、その後消えます — それらは非常に一時的なものです (リプレイ サブジェクトまたは他のトリックが使用されない限り)。

おそらく、そのシグナルにサブスクライブしたいと思うでしょう。より詳細な説明については、フレームワークの概要README の例を確認してください。

于 2013-06-19T20:30:24.723 に答える
2
  1. Reactiveの言語での「ReactiveCocoa シグナルからの現在の値」は、このシグナルへのサブスクリプションです。

メソッドを使用-subscribe...すると、シグナルの現在および将来の値にアクセスできます。

    [signal subscribeNext:^(id x) {
        NSLog(@"Current value = %@", x);
    }];
  1. 別の方法: この値を別の値で使用したい場合は、次のようなcombineLatest:reduce:方法を使用します。

    RACSignal *calculationWithCurrentValueSignal =
      [RACSignal combineLatest:@[signalWithCurrentValueThatNeeded, anotherSignal]
                        reduce:^id(NSNumber *myCurrentValue, NSNumber *valueFromAnotherSignal) {
                           //do your calculations with this values..
                          return newValue;
                        }];
    
于 2014-06-05T14:07:49.200 に答える
1

回答は 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()
于 2016-02-10T08:53:23.933 に答える