9

私はこのようなRACableを使用している場合:(信号が発射させ、変更前)ReactiveCocoaシグナルから「古い値」を取得するにはどうすればよいですか?

私がMyPropでの古い値にアクセスすることができますすることができますどのように
[RACAbleWithStart(self.myProp) subscribeNext:^(id x) { 
    // Do stuff 

}]; 

?だから私はこのようにそれにアクセスすることができます

[RACAbleWithStart(self.myProp) subscribeNext:^(id x) { 
    // Do stuff 
    id newValue = x; 
    id oldValue = RAC_oldValue; 
}]; 
+0

理由だけではなく、KVOを使用しませんの?リアクティブパターンはxではなくxの変化を扱います。 'RACAbleWithStart()'はあなたが思っていることをしません:新しい信号を生成しますが、変更を待つのではなく、xの初期値を設定します。それは何も覚えておらず、それはあなたに可変状態の前と後のビューを与えることを意図していません。 – CodaFi

+0

@CodaFi私はRACAbleWithStartが私に古い価値を与えることを期待していません。私はそれがただ加入者をすぐに発砲させることを知っている。 ReactiveCocoaはKVOのラッパーを使いやすいように設計されているので、この質問に古い値にアクセスする方法があるかどうかを確認するよう求めています。 – zakdances

+2

はい、それはKVOのラッパーですが、私が言ったように、反応パターンは古い値を扱わないので、変更や新しい値を扱います。古い値を保存するのに近いものが必要な場合は、RACReplaySubjectを介してRACAbleWithStart()関係を実行します(完璧ではありませんが、動作します)。 – CodaFi

答えて

4

を私は成功を収めて、このスニペットを使用しています

[[object rac_valuesAndChangesForKeyPath:@"property" options:NSKeyValueObservingOptionOld observer:self] subscribeNext:^(RACTuple *tuple) { 
    id newObject = tuple.first; 
    NSDictionary *change = tuple.second; 
    id oldObject = change[NSKeyValueChangeOldKey]; 
}]; 

出典:ReactiveCocoa documentation

関連する問題