【问题标题】: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 参数的示例的答案将非常有用!

标签: objective-c cocoa-touch cocoa nspredicate


【解决方案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
猜你喜欢
  • 2014-08-14
  • 2016-04-25
  • 2017-04-13
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 2019-05-10
  • 2011-08-27
  • 2014-08-31
相关资源
最近更新 更多