Objective c 子类化NSPredicate以添加运算符
Cocoa定义了谓词类(Objective c 子类化NSPredicate以添加运算符,objective-c,cocoa,nspredicate,subclassing,Objective C,Cocoa,Nspredicate,Subclassing,Cocoa定义了谓词类(NSPredicate,NSExpression,等等),“提供了在Cocoa中指定查询的通用方法”。这组类描述了我需要的东西,但有一个小缺点:我需要额外的操作符 NSComparisonPredicate已经处理了14个操作符(),但我想添加,比如说,时态操作符。。。或运算符来表示以下内容: “变量至少有n个条目”(二进制运算符) “变量的值最多为连续天数n”(三元运算符) 显然,我需要自己实现这些,并且执行这些查询的数据模型必须支持这些操作符。但是,有没有办法实现
NSPredicate
,NSExpression
,等等),“提供了在Cocoa中指定查询的通用方法”。这组类描述了我需要的东西,但有一个小缺点:我需要额外的操作符
NSComparisonPredicate
已经处理了14个操作符(),但我想添加,比如说,时态操作符。。。或运算符来表示以下内容:
- “变量至少有n个条目”(二进制运算符)
- “变量的值最多为连续天数n”(三元运算符)
枚举
,我怀疑我能否在这方面进行扩展。还是我完全错过了这条船 NSPredicate
,我不确定这是不是最好的主意
从理论上讲,您应该将NSPredicate
子类化,创建新的初始值设定项和属性,然后重写-evaluateWithObject:substitutionVariables:
方法来进行自定义比较
实际上,这可能比那要困难得多
您可以考虑使用<代码>函数()> <代码>。前一段时间,以及它如何使用
NSExpression
,从而使用NSPredicate
。就我个人而言,我可能会这样做,因为这样您仍然可以使用+predicateWithFormat:
语法来创建NSPredicate
。创建一个子类来添加操作符必然会阻止您使用内置解析器