+[NSPredicate predicateWithBlock:]
的声明如下所示:
+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block
苹果公司关于代码块的第二个参数bindings
的文档中写道:
替代变量字典。字典必须包含接收器中所有变量的键值对。
我不明白为什么需要这个参数--我也没有看到它在任何地方被使用。为什么它会在那里?
另外,在-[NSArray filteredArrayUsingPredicate:]
中使用基于块的谓词时,是否需要查看bindings
内部
发布于 2011-09-20 01:50:02
请参阅类文档:
您还可以创建包含变量的谓词,以便可以在运行时替换具体值之前预定义谓词。在MacOSXv10.4中,对于使用变量的谓词,求值是一个两步的过程(请参阅predicateWithSubstitutionVariables:和evaluateWithObject:)。在MacOSXv10.5和更高版本中,您可以使用evaluateWithObject:substitutionVariables:,它组合了这些步骤。
如果您随后调用evaluateWithObject:substitutionVariables:
,则该字典将被传递到您的块。这实现了相当通用的谓词创建,其中结果谓词可以传递,并且可以使用一致的替代语言进行计算。
https://stackoverflow.com/questions/7472281
复制相似问题