黑马程序员--NSPredicate

Cocoa用NSPredicate 描述查询的方式,原理类似于在数据库中进行查询。


创建

在即将NSPredicate 应用于某个对象之前,首先需要创建它。有两种基本方式:

  • 创建许多对象,并将它们组合起来。
  • 查询代码中的字符串。
Car  *car;
car = makeCar(@"Herbie",@"Honda",@"CRX",1984,2,110000,58);
[garage addCar:car ];

//创建谓词
NSPredicate *predicate ;  //<span style="font-family: Arial, Helvetica, sans-serif;">predicate</span><span style="font-family: Arial, Helvetica, sans-serif;">对象指针指向</span><span style="font-family: Arial, Helvetica, sans-serif;">NSPredicate</span><span style="font-family: Arial, Helvetica, sans-serif;">
</span>
predicate =[NSPredicate predicateWithFormat:@"name == 'Herbie' "]; //使用+<span style="font-family: Arial, Helvetica, sans-serif;">predicateWithFormat:在后台构建对象树,这些树将用来计算谓词的值</span>

计算谓词
这里的“谓词”通常用在数学和计算机科学概念中,表示计算真值和假值得函数。
BOOL match =[predicate evaluateWithObject:car ]; //+<span style="font-family:Arial, Helvetica, sans-serif;">evaluateWithObject:通知接收对象(谓词)根据制定的对象计算自身的值。本例中的接收对象时car </span>

NSLog(@"%s ",(match )?"YES":"NO");//match为键路径


predicate = [NSPredicate predicateWithFormat:@"engine.horsepower >150 "];//字符串左侧是一个键路径,该键路径连接到汽车内部,查找引擎马力,将马力值与150比较大小。
match = [predicate evaluateWithObject: car ];//通过计算内容match

燃料过滤器

-filteredArrayUsingPredicate:是NSNarry 数组中的一种类别方法,它将循环顾虑数组内容,根据谓词计算每个对象的值,并将值为YES的对象累积到将被返回的新数组中。
NSArray *results;
results =[cars filteredArrayUsingPredicate:predicate ];
NSLog(@"%@",result );

格式说明符

可以通过两种方式将不同的内容放入谓词格式字符串中:
  • 格式说明符

predicate = [NSPredicate predicateWithFormat:@"name==%@",@"Herbie"];

     //使用格式说明符
     NSPredicate *predicateTemplate =[NSPredicate predicateWithFormat:@"name ==$NAME "];


  • 变量名
运算符
NSPredicate的格式字符串包含戴昂不同的运算符。
  • 比较和逻辑运算符
    • 等号运算符==和=
    • 不等号运算符
      • >: 大于
      • >=和=>: 大于或等于
      • <: 小于
      • <=和=<: 小于或等于
      • !=和<>:  不等于
    • 括号表达式
    • AND 、OR、NOT逻辑运算符
    • C样式的等效表达式&&、||、!
  • 数组运算符
SELF
SELF可以引用用于谓词计算的对象。通常将为此中所有的键路径表示成对应的SELF.
predicate= [NSPredicate predicateWithFormat:@"SELF.name IN{'Herbie','Snugs','Badger','Flap'}"];

字符串运算符
关系运算符:
  • BEGINSWITH:检查某个字符串是否以另一个字符串开头
  • ENDSWITH:检查某个字符串是否以另一个字符串结尾
  • CONTAINS:检查某个字符串是否在另一个字符串内部
例如:“name BEGINSWITH ‘bad’ ”匹配"Badger "

LIKE 运算符
在该运算符中,?表示与一个字符匹配,*表示与人一个字符相匹配。(有时称为“通配符”,听起来很耳熟)
例如:“name  LIKE '*er* ' ”会与任何含有“er ”的名称相匹配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值