predicateWithBlock中块的bindings参数是什么:用于?

时间:2011-09-19 14:10:02

标签: objective-c cocoa-touch cocoa nspredicate

+[NSPredicate predicateWithBlock:]的声明如下:

+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block

Apple关于块的第二个参数bindings的文档说明它是:

  

替换变量字典。字典必须包含接收器中所有变量的键值对。

我无法弄清楚为什么需要这个参数 - 我也没看到它在任何地方被使用过。它为什么存在?

此外,在bindings使用基于块的谓词时,是否需要查看-[NSArray filteredArrayUsingPredicate:]内部?

1 个答案:

答案 0 :(得分:11)

请参阅课程文档:

  

您还可以创建包含变量的谓词,以便   在替换具体值之前,可以预先定义谓词   运行。在Mac OS X v10.4中,对于使用变量的谓词,   评估是一个两步过程(见   predicateWithSubstitutionVariables:和evaluateWithObject :)。在Mac中   OS X v10.5及更高版本,您可以使用   evaluateWithObject:substitutionVariables:,它结合了这些步骤。

然后查看predicate syntax docs


如果您随后调用evaluateWithObject:substitutionVariables:,则会将字典传递给您的区块。这使得相当通用的谓词创建可以传递结果谓词,并且可以使用一致的替换语言进行评估。