子类化NSPredicate以添加运算符

5 cocoa objective-c subclassing nspredicate

Cocoa定义了谓词类(NSPredicate,NSExpression等),它"提供了在Cocoa中指定查询的一般方法" 谓词编程.这组课程描述了我需要的东西,但有一点简短:我想要额外的操作员.

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

  • " 变量 至少有 n 个条目 " (二元运算符)
  • " 变量 具有 为至多 Ñ 连续日 " (三元运算符)

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

Dav*_*ong 7

已经 度过了 一个 很大 时间 周围 NSPredicate,我不知道这是最大的想法.

从理论上讲,您可以NSPredicate创建新的初始值设定项和属性,然后覆盖该-evaluateWithObject:substitutionVariables:方法以进行自定义比较.

实际上,它可能比那困难得多.

你可以考虑FUNCTION()改用. 我写了一篇博客文章FUNCTION前一段时间,它是如何玩弄NSExpression,因此用NSPredicate.就个人而言,我可能会这样做,因为那时你仍然可以使用+predicateWithFormat:语法来创建NSPredicate.创建子类以添加运算符必然会阻止您使用内置解析器.