9

Se sto usando RACable come questo:Come ottengo il "vecchio valore" da un segnale ReactiveCocoa?

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

}]; 

Come posso accedere al vecchio valore di myProp (prima della modifica della causato il segnale al fuoco)? Così posso accedere in questo modo:

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

Perché non usare KVO? I pattern reattivi si occupano di cambiamenti in x, non in x. 'RACAbleWithStart()' non fa quello che pensi che faccia: crea un nuovo segnale, ma lo popola con il valore iniziale di x, invece di aspettare che una modifica esploda. Non ricorda nulla e non ha lo scopo di darti "prima e dopo" le visualizzazioni dello stato delle variabili. – CodaFi

+0

@CodaFi Non mi aspetto che RACAbleWithStart mi dia il vecchio valore. So che fa immediatamente sparare il sottoscrittore. Sto facendo questa domanda per verificare se c'è un modo per accedere al vecchio valore, dal momento che ReactiveCocoa è progettato come un wrapper più facile da usare su KVO. – zakdances

+2

Sì, è un involucro attorno a KVO, ma come ho detto, i modelli reattivi non si occupano dei vecchi valori, si occupano di cambiamenti e nuovi valori. Se hai bisogno di qualcosa vicino al salvataggio di un vecchio valore, esegui la tua relazione RACAbleWithStart() attraverso un RACReplaySubject (non è perfetto, ma funzionerà). – CodaFi

risposta

4

Ho usato questo frammento con successo:

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

Fonte: ReactiveCocoa documentation