Cocoa提供了一个类NSPredicate类,该类主要用于指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。谓词表示计算真值或假值的函数。

NSPredicate *predicate;

predicate=[NSPredicatepredicateWithFormat:@"name=='Herbie'"];//用predicateWithFormat创建一个谓词,name作为键路径

BOOL match=[predicateevaluateWithObject:car];//car作为接收对象,evaluateWithObject返回一个bool值。

NSLog(@"%s",(match)?"YES":"NO");

predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower
> 150"];

NSArray *cars = [garage cars];

for (Car *car in [garage cars]) {

if ([predicate evaluateWithObject: car]) {

NSLog (@"%@", car.name);

}

}

遍历cars判断是否是真,然后输出。

predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower
> 150"];

NSArray *results;

results = [carsfilteredArrayUsingPredicate: predicate];//它将循环过滤数组内容,根据谓词计算每个对象的值,并将值为YES的对象累计到将被返回的新数组中。

NSLog (@"%@", results);

filteredArrayUsingPredicate这个方法可以得到我们所需要的值。加上

NSArray *names;

names=[results valueForKey:@"name"];

NSLog (@"%@", names);

就和上面的值一样。

NSMutableArray *carsCopy = [carsmutableCopy];

[carsCopyfilterUsingPredicate: predicate];//filterUsingPredicate和NSMutableArray构成新数组。

NSLog (@"%@", carsCopy);

predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower
> %d"];

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"%@", results);

NSPredicate *predicateTemplate;

NSDictionary *varDict;

predicateTemplate = [NSPredicatepredicateWithFormat: @"engine.horsepower > $POWER"];//创建一个键/值字典来存储,这里$符号用于变量

varDict = [NSDictionarydictionaryWithObjectsAndKeys:

[],@"POWER", nil];//@后面参数名

predicate = [predicateTemplatepredicateWithSubstitutionVariables: varDict];

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"%@", results);

predicate = [NSPredicatepredicateWithFormat:

@"(engine.horsepower > 50) AND (engine.horsepower < 200)"];//可以运用运算符

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"oop %@", results);

predicate = [NSPredicatepredicateWithFormat:

@"engine.horsepower BETWEEN { 50, 200 }"];//这里可以运用between关键字。和上面效果一样

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"%@", results);

NSArray *betweens = [NSArray arrayWithObjects:

[], [],nil];

predicate = [NSPredicatepredicateWithFormat: @"engine.horsepower BETWEEN %@", betweens];

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"%@", results);

predicateTemplate = [NSPredicatepredicateWithFormat:@"engine.horsepower
BETWEEN $POWERS"];

varDict = [NSDictionarydictionaryWithObjectsAndKeys: betweens, @"POWERS", nil];

predicate = [predicateTemplatepredicateWithSubstitutionVariables: varDict];//用变量

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"%@", results);

predicate = [NSPredicatepredicateWithFormat:@"name
< 'Newton'"];//不等号不仅可以用于数字,也可以用于字符串值。

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"%@", [results valueForKey: @"name"]);

predicate = [NSPredicatepredicateWithFormat:@"name IN
{ 'Herbie', 'Snugs', 'Badger', 'Flap' }"];//包含在其中用IN

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"%@", [results valueForKey: @"name"]);

predicate = [NSPredicatepredicateWithFormat:@"SELF.name
IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"];//self关键字

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"%@", [results valueForKey: @"name"]);

names = [cars valueForKey: @"name"];

predicate = [NSPredicatepredicateWithFormat:@"SELF IN
{ 'Herbie', 'Snugs', 'Badger', 'Flap' }"];//self关键字

results = [namesfilteredArrayUsingPredicate: predicate];

NSLog (@"%@", results);

predicate = [NSPredicatepredicateWithFormat:@"name
BEGINSWITH 'Bad'"];//字符串运算符BEGINSWITH,ENDSWITH,CONTAINS[c][d][cd]

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"%@", results);

BEGINSWITH:检查某个字符串是否以另一个字符串开头。

ENDSWITH:检查某个字符串是否以另一个字符串结尾。

CONTAINS:检查某个字符串是否以另一个字符串内部。

[c]不区分大小写[d]不区分发音符号即没有重音符号[cd]既不区分大小写,又不区分发音符号。

predicate = [NSPredicatepredicateWithFormat:@"name LIKE[cd]
'*er*'"];//*代表通配符Like还接受[cd].

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"%@", results);

predicate = [NSPredicatepredicateWithFormat:@"name LIKE[cd]
'???er*'"];//?只匹配一个字符并且还可以接受[cd].

results = [cars filteredArrayUsingPredicate: predicate];

NSLog (@"%@", results);

还可以使用MATCHES运算符。赋给该运算符一个正则表达式。

Object-c学习笔记十八-----NSPredicate的更多相关文章

  1. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  2. (C/C++学习笔记) 十八. 继承和多态

    十八. 继承和多态 ● 继承的概念 继承(inheritance): 以旧类为基础创建新类, 新类包含了旧类的数据成员和成员函数(除了构造函数和析构函数), 并且可以派生类中定义新成员. 形式: cl ...

  3. Java基础学习笔记十八 异常处理

    什么是异常?Java代码在运行时期发生的问题就是异常. 在Java中,把异常信息封装成了一个类.当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置.原因等). 异常的继承体系 在 ...

  4. python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制

    django  Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...

  5. SharpGL学习笔记(十八) 解析3ds模型并显示

    笔者设想的3D仿真中的元件,是不可能都是“画”出来的.这样就玩复杂了,应该把任务分包出去,让善于制作模型的软件来制作三维模型,我们只需要解析并且显示它即可. 3dsmax制作三维模型的方便,快捷,专业 ...

  6. MYSQL进阶学习笔记十八:MySQL备份和还原!(视频序号:进阶_37)

    知识点十九:MySQL的备份的还原(38) 一.mysql的备份 1.通过使用mysqldump的命令备份 使用mysqldump命令备份,mysqldump命令将数据库中的数据备份成一个文本文件.表 ...

  7. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)

    1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函 ...

  8. PHP学习笔记十八【构造函数】

    <?php class Person{ public $name; public $age; //定义构造函数 function 空格__construct 构造方法没有返回值,对象自动调用 p ...

  9. Python3学习笔记十八

    1.    MTV M:   model     与数据库相关 T:   Template    与html相关 V:   views      与逻辑相关 一.    URL配置 启动:python ...

随机推荐

  1. 避免SQL注入三慷慨法

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangyy130/article/details/26154837       要说SQL注入还要从 ...

  2. 玩转Spring Boot 自定义配置、导入XML配置与外部化配置

    玩转Spring Boot 自定义配置.导入XML配置与外部化配置       在这里我会全面介绍在Spring Boot里面如何自定义配置,更改Spring Boot默认的配置,以及介绍各配置的优先 ...

  3. 按照in条件排序

    --按照in中条件排序 ,,,) order by instr('395,396,399,313',ghdm);

  4. cf round 480E The Number Games

    题意:给一棵树,点$i$的点权是$2^i$,你需要删掉$k$个点,使得剩下的点连通的情况下剩下的点权值和最大. $k \leq n \leq 10^6$ 如果考虑删哪些点,是不好考虑的,会出问题. 反 ...

  5. Vue--vue中的生命周期

    Vue的生命周期: 在理解vue生命周期前要把握它的三个重点: 创建-> 改变 -> 销毁 创建: 1.执行beforeCreate 2.监控data 3.注册事件 4.执行create ...

  6. 错觉-Info:让你难以置信的视错觉

    ylbtech-错觉-Info:让你难以置信的视错觉 1.返回顶部 1. 看下图:如果你看到舞者逆时针旋转说明你用左脑,如果看到顺时针旋转说明你用右脑思维. 据说这是耶鲁大学五年的研究成果.   下图 ...

  7. vue源码解读-目录结构

    目录结构 ├── scripts ------------------------------- 构建相关的文件,一般情况下我们不需要动│ ├── git-hooks ---------------- ...

  8. mac上SVN的图形工具 SmartSVN注册

    mac上SVN的图形工具 SmartSVN注册 打开smartsvn,选中license注册 选中文件smartsvn.license,下一步下一步就ok了 smartsvn.license Name ...

  9. 如何实现已发布app的自动更新

    要实现app的自动更新,做两件事情就可以搞定 1.获取当前手机中的app版本号 我们可以通过查询mainbundle中的获取CFBundleVersion NSDictionary *infoDict ...

  10. SQLServer —— EXISTS子查询

    一.删除数据库 use master go if exists (select * from sysdatabases where name = 'Demo') drop database Demo ...