Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 子类化NSPredicate以添加运算符_Objective C_Cocoa_Nspredicate_Subclassing - Fatal编程技术网

Objective c 子类化NSPredicate以添加运算符

Objective c 子类化NSPredicate以添加运算符,objective-c,cocoa,nspredicate,subclassing,Objective C,Cocoa,Nspredicate,Subclassing,Cocoa定义了谓词类(NSPredicate,NSExpression,等等),“提供了在Cocoa中指定查询的通用方法”。这组类描述了我需要的东西,但有一个小缺点:我需要额外的操作符 NSComparisonPredicate已经处理了14个操作符(),但我想添加,比如说,时态操作符。。。或运算符来表示以下内容: “变量至少有n个条目”(二进制运算符) “变量的值最多为连续天数n”(三元运算符) 显然,我需要自己实现这些,并且执行这些查询的数据模型必须支持这些操作符。但是,有没有办法实现

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

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

  • “变量至少有n个条目”(二进制运算符)
  • “变量的值最多为连续天数n”(三元运算符)
显然,我需要自己实现这些,并且执行这些查询的数据模型必须支持这些操作符。但是,有没有办法实现它并从现有的NSPredicate类中获益?由于操作符被定义为
枚举
,我怀疑我能否在这方面进行扩展。还是我完全错过了这条船

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

从理论上讲,您应该将
NSPredicate
子类化,创建新的初始值设定项和属性,然后重写
-evaluateWithObject:substitutionVariables:
方法来进行自定义比较

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

您可以考虑使用<代码>函数()> <代码>。前一段时间,以及它如何使用

NSExpression
,从而使用
NSPredicate
。就我个人而言,我可能会这样做,因为这样您仍然可以使用
+predicateWithFormat:
语法来创建
NSPredicate
。创建一个子类来添加操作符必然会阻止您使用内置解析器