【问题标题】:Subclassing NSPredicate to add operator子类化 NSPredicate 以添加运算符
【发布时间】:2011-12-02 21:32:43
【问题描述】:

Cocoa 定义了谓词类(NSPredicateNSExpression 等)“提供了在 Cocoa 中指定查询的通用方法” Predicate Programming。这组类描述了我需要的东西,但有一个小缺点:我想要额外的运算符。

NSComparisonPredicate 已经处理了 14 个运算符 (NSPredicateOperatorType) 但我想添加,比如说,时间运算符...或运算符来表示以下内容:

  • " 变量 至少有 n 条目" (二元运算符)
  • " 变量 最多, n 连续天" (三元运算符)

显然,我需要自己实现这些,并且执行此类查询的数据模型必须支持这些运算符。但是,有没有办法实现它并从现有的 NSPredicate 类中受益?由于运算符被定义为enum,我怀疑我可以在这方面进行扩展。还是我完全错过了这条船?!

【问题讨论】:

    标签: objective-c cocoa nspredicate subclassing


    【解决方案1】:

    HavingspentalotoftimeplayingaroundwithNSPredicate,我不确定这是不是最好的主意。

    理论上,您应该继承 NSPredicate,创建新的初始化程序和属性,然后重写 -evaluateWithObject:substitutionVariables: 方法来进行自定义比较。

    实际上,可能比这要困难得多。

    您可以考虑改用FUNCTION()I wrote a blog post about FUNCTION 不久前以及它如何与NSExpression 以及因此与NSPredicate 一起使用。就个人而言,我可能会选择这个,因为你仍然可以使用+predicateWithFormat: 语法来创建NSPredicate。创建子类来添加运算符必然会阻止您使用内置解析器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      相关资源
      最近更新 更多