Cocoa 定义谓词类(NSPredicate
、NSExpression
等)“提供了在 Cocoa 中指定查询的通用方法” Predicate Programming 。这组类描述了我的需要,但有一个小缺点:我想要额外的运算符。
NSComparisonPredicate
已经处理了 14 个运算符 ( NSPredicateOperatorType ),但我想添加,比如说,时间运算符……或运算符来表示诸如:
- "变量 至少有 n 项"(二元运算符)
- "变量 具有 值 至多, n 连续几天” (三元运算符)
显然,我需要自己实现这些,并且执行此类查询的数据模型必须支持这些运算符。但是,有没有办法实现它并从现有的 NSPredicate 类中受益?由于运算符被定义为 enum
,我怀疑我能否在这方面进行扩展。还是我完全错过了这艘船?!
最佳答案
Having spent a lot of time playing around with NSPredicate
,我不确定这是不是最好的主意。
理论上,您可以子类化 NSPredicate
,创建新的初始化器和属性,然后覆盖 -evaluateWithObject:substitutionVariables:
方法以进行自定义比较。
实际上,它可能比这要困难得多。
您可以考虑改用 FUNCTION()
。 I wrote a blog post about FUNCTION
前一段时间以及它如何与 NSExpression
一起玩,因此与 NSPredicate
一起玩。就个人而言,我可能会接受这个,因为那样你仍然可以使用 +predicateWithFormat:
语法来创建 NSPredicate
。创建子类以添加运算符必然会阻止您使用内置解析器。
关于objective-c - 子类化 NSPredicate 以添加运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8362955/