Ios 如何使用ReactiveCocoa删除观察者?
如何在某些事件后停止接收新名称Ios 如何使用ReactiveCocoa删除观察者?,ios,objective-c,reactive-cocoa,Ios,Objective C,Reactive Cocoa,如何在某些事件后停止接收新名称 [RACObserve(self, username) subscribeNext:^(NSString *newName) { if ([newName isEqualToString:@"SomeString"]) { //Do not observe any more } }]; 顺便说一句,很抱歉这个明显的问题,但我找不到答案。在ReactiveCocoa中,有一点不同的想法很重要:你们不想“删除”一个观察者,你们想
[RACObserve(self, username) subscribeNext:^(NSString *newName) {
if ([newName isEqualToString:@"SomeString"])
{
//Do not observe any more
}
}];
顺便说一句,很抱歉这个明显的问题,但我找不到答案。在ReactiveCocoa中,有一点不同的想法很重要:你们不想“删除”一个观察者,你们想创建一个信号,当事情发生时,这个信号就完成了 您可以使用
takentilblock:
导出一个信号,该信号将在特定时间后停止发送值:
[[RACObserve(self, username) takeUntilBlock:^(NSString *name) {
return [name isEqualToString:@"something"];
}] subscribeNext:^(NSString *name) {
NSLog(@"%@", name);
}];
但这不会为字符串@“something”
发送下一个,只发送它前面的名称。如果需要,可以附加它:
NSString *sentinel = @"something";
[[[RACObserve(self, username) takeUntilBlock:^(NSString *name) {
return [name isEqualToString:sentinel];
}] concat:[RACSignal return:sentinel]] subscribeNext:^(NSString *name) {
NSLog(@"%@", name);
}];
它不是很优雅,但是你可以制作一个
TakenTilblockInclusive
帮助器来帮助你实现这种行为,并将粗俗隐藏在其中。你可以使用方法“dispose”处理从“subscribeNext”返回的一次性对象
__block RACDisposable *handler = [RACObserve(self, username) subscribeNext:^(NSString *newName) {
if ([newName isEqualToString:@"SomeString"]) {
//Do not observe any more
[handler dispose]
}
}];
谢谢这就是我想看到的。如果
self.username
在这行代码之前等于'SomeString',处理程序将不会处理,对吗?