Ios 我怎样才能得到“的”呢;“旧价值”;从一个反应性的信号?

Ios 我怎样才能得到“的”呢;“旧价值”;从一个反应性的信号?,ios,objective-c,key-value-observing,reactive-programming,reactive-cocoa,Ios,Objective C,Key Value Observing,Reactive Programming,Reactive Cocoa,如果我像这样使用RACable: [RACAbleWithStart(self.myProp) subscribeNext:^(id x) { // Do stuff }]; [RACAbleWithStart(self.myProp) subscribeNext:^(id x) { // Do stuff id newValue = x; id oldValue = RAC_oldValue; }]; 如何访问myProp的旧值(在导致信号触发的更改之前)?所以我

如果我像这样使用RACable:

[RACAbleWithStart(self.myProp) subscribeNext:^(id x) {
   // Do stuff

}];
[RACAbleWithStart(self.myProp) subscribeNext:^(id x) {
   // Do stuff
   id newValue = x;
   id oldValue = RAC_oldValue;
}];
如何访问myProp的旧值(在导致信号触发的更改之前)?所以我可以这样访问它:

[RACAbleWithStart(self.myProp) subscribeNext:^(id x) {
   // Do stuff

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

我成功地使用了这个片段:

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

来源:

为什么不直接使用KVO?反应模式处理x的变化,而不是x
RACAbleWithStart()
不会执行您认为它会执行的操作:它会创建一个新信号,但会使用初始值x填充它,而不是等待触发更改。它什么都不记得,也不是要给你变量状态的“前后”视图。@CodaFi我不希望RACAbleWithStart给我旧值。我知道这只会让订阅者立即开火。我问这个问题是为了检查是否有办法访问旧值,因为ReactiveCocoa被设计成一个更易于使用的围绕KVO的包装器。是的,它是围绕KVO的包装器,但正如我所说的,反应模式不处理旧值,它们处理更改和新值。如果您需要接近保存旧值的任何内容,请通过RACReplaySubject运行您的RACAbleWithStart()关系(它并不完美,但会起作用)。@CodaFi在答案中给出解释/示例,我将进行绿色检查。