predicateWithBlock: 中块的 bindings 参数是做啥用的?
Posted
技术标签:
【中文标题】predicateWithBlock: 中块的 bindings 参数是做啥用的?【英文标题】:What is the bindings parameter for the block in predicateWithBlock: used for?predicateWithBlock: 中块的 bindings 参数是做什么用的? 【发布时间】:2011-09-19 14:10:01 【问题描述】:+[NSPredicate predicateWithBlock:]
的声明如下所示:
+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block
Apple 的关于该块的第二个参数 bindings
的文档说它是:
替换变量字典。字典必须包含接收器中所有变量的键值对。
我不知道为什么需要这个参数——我也没有看到它在任何地方被使用过。为什么会在那里?
另外,当使用带有 -[NSArray filteredArrayUsingPredicate:]
的基于块的谓词时,我是否需要查看 bindings
内部?
【问题讨论】:
这里有一个关于在何处以及如何使用bindings
参数的示例的答案将非常有用!
【参考方案1】:
查看类文档:
您还可以创建包含变量的谓词,以便 谓词可以在替换具体值之前预先定义 运行。在 Mac OS X v10.4 中,对于使用变量的谓词, 评估是一个两步过程(见 predicateWithSubstitutionVariables: 和 evaluateWithObject:)。在 Mac 中 OS X v10.5 及更高版本,您可以使用 evaluateWithObject:substitutionVariables:,它结合了这些步骤。
然后查看predicate syntax docs。
如果您随后调用evaluateWithObject:substitutionVariables:
,则该字典将传递给您的块。这样可以创建相当通用的谓词,其中可以传递结果谓词,并且可以使用一致的替换语言进行评估。
【讨论】:
当你定义一个字符串格式的谓词时,我可以看到替换变量的用处。但是我仍然不明白当您使用predicateWithBlock:
创建谓词时如何使用替换变量。 (一个例子会很棒)
啊,我现在明白你的意思了。此外,在创建谓词以传递给-[NSArray filteredArrayUsingPredicate:]
时是否使用了绑定参数?我的猜测不是。
@JulianF.Weinert 链接不再有效,您还有其他参考资料吗?
对不起,这个互联网有点愚蠢;)web.archive.org/web/20160330070114/http://www.wannabegeek.com/…
当然,archive.org 拥有一切! :D以上是关于predicateWithBlock: 中块的 bindings 参数是做啥用的?的主要内容,如果未能解决你的问题,请参考以下文章