È importante pensare a cose un po 'diversamente in ReactiveCocoa: non si vuole "rimuovere" un osservatore, si vuole creare un segnale che si completa quando qualcosa accade.
È possibile utilizzare takeUntilBlock:
per derivare un segnale che si ferma l'invio di valori dopo un certo periodo di tempo:
[[RACObserve(self, username) takeUntilBlock:^(NSString *name) {
return [name isEqualToString:@"something"];
}] subscribeNext:^(NSString *name) {
NSLog(@"%@", name);
}];
Ma non invierà una prossima per la stringa @"something"
, solo i nomi prima di esso. Se questo è desiderato, si potrebbe aggiungere che:
NSString *sentinel = @"something";
[[[RACObserve(self, username) takeUntilBlock:^(NSString *name) {
return [name isEqualToString:sentinel];
}] concat:[RACSignal return:sentinel]] subscribeNext:^(NSString *name) {
NSLog(@"%@", name);
}];
Non è molto elegante, ma si potrebbe fare un takeUntilBlockInclusive
di supporto che si otterrebbe questo comportamento, e nascondere la grossness in là.
fonte
2015-04-15 17:34:16
Grazie mille! – serj