Es ist wichtig, in ReactiveCocoa über Dinge ein wenig anders zu denken: Sie möchten nicht einen Beobachter "entfernen", möchten Sie ein Signal erstellen, das abgeschlossen ist, wenn etwas das passiert.
Sie können takeUntilBlock:
verwenden, um ein Signal abzuleiten, die Werte nach einer bestimmten Zeit das Senden stoppen:
[[RACObserve(self, username) takeUntilBlock:^(NSString *name) {
return [name isEqualToString:@"something"];
}] subscribeNext:^(NSString *name) {
NSLog(@"%@", name);
}];
Aber das wird kein nächstes für die Zeichenfolge @"something"
, nur die Namen, bevor sie senden. Wenn dies gewünscht ist, können Sie es anhängen:
NSString *sentinel = @"something";
[[[RACObserve(self, username) takeUntilBlock:^(NSString *name) {
return [name isEqualToString:sentinel];
}] concat:[RACSignal return:sentinel]] subscribeNext:^(NSString *name) {
NSLog(@"%@", name);
}];
Es ist nicht sehr elegant, aber man konnte einen takeUntilBlockInclusive
Helfer, die Sie dieses Verhalten bekommen würde, und die Rohheit dort verstecken.
Vielen Dank! – serj