+[NSPredicate predicateWithBlock:]
的声明如下:
+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block
Apple关于块的第二个参数bindings
的文档说明它是:
替换变量字典。字典必须包含接收器中所有变量的键值对。
我无法弄清楚为什么需要这个参数 - 我也没看到它在任何地方被使用过。它为什么存在?
此外,在bindings
使用基于块的谓词时,是否需要查看-[NSArray filteredArrayUsingPredicate:]
内部?
答案 0 :(得分:11)
请参阅课程文档:
您还可以创建包含变量的谓词,以便 在替换具体值之前,可以预先定义谓词 运行。在Mac OS X v10.4中,对于使用变量的谓词, 评估是一个两步过程(见 predicateWithSubstitutionVariables:和evaluateWithObject :)。在Mac中 OS X v10.5及更高版本,您可以使用 evaluateWithObject:substitutionVariables:,它结合了这些步骤。
如果您随后调用evaluateWithObject:substitutionVariables:
,则会将字典传递给您的区块。这使得相当通用的谓词创建可以传递结果谓词,并且可以使用一致的替换语言进行评估。