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

Cha*_*pta 21 cocoa cocoa-touch objective-c nspredicate

声明+[NSPredicate predicateWithBlock:]如下:

+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block
Run Code Online (Sandbox Code Playgroud)

Apple的块的第二个参数的文档bindings说,它是:

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

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

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

bbu*_*bum 11

请参阅课程文档:

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

然后查看谓词语法docs.


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

  • 当您使用字符串格式定义谓词时,我可以看到替换变量的有用性.但是我仍然不明白在使用`predicateWithBlock:`创建谓词时如何使用替换变量.(一个例子很棒) (2认同)