Ios 过滤方法是如何工作的?
} 这是ReactiveCocoa的filter的实现。我不知道这段代码是什么意思。我也找不到第二个返回方法的任何引用Ios 过滤方法是如何工作的?,ios,objective-c,runtime,reactive-cocoa,Ios,Objective C,Runtime,Reactive Cocoa,} 这是ReactiveCocoa的filter的实现。我不知道这段代码是什么意思。我也找不到第二个返回方法的任何引用 -(instancetype)filter:(BOOL (^)(id value))block { NSCParameterAssert(block != nil); Class class = self.class; return [[self flattenMap:^ id (id value) { if (block(value)) { ret
-(instancetype)filter:(BOOL (^)(id value))block {
NSCParameterAssert(block != nil);
Class class = self.class;
return [[self flattenMap:^ id (id value) {
if (block(value)) {
return [class return:value];
} else {
return class.empty;
}
}] setNameWithFormat:@"[%@] -filter:", self.name];
还有,这个instancetype是什么意思?假设这个值是一个字符串,我检查它的长度是否大于2。使用filter方法将返回什么?filter方法调用当前类的class方法,以使用该方法获取RACStream子类。使用
return:
将发出一个信号,发送传递的值,然后完成。使用empty
给出一个信号,该信号立即发送completed而不发送下一个值,这将从流中删除值过滤值,这要归功于flattmap:
在创建信号时关闭该信号 instancetype
意味着如果你在RACSignal
上调用它,你会得到RACSignal
返回,如果你在RACSequence
上调用它,你会得到RACSequence
返回,这样你就不必从RACStream
向下播放。您通常会在类方法上看到它,但是……我没有注意到return:方法以前是在这个类中定义的。然而,这个方法名称也有点让人困惑,它非常简洁地描述了这个方法的实际功能,一旦你克服了最初的困惑,它就会变得非常简洁。
return [class return:value];