一:基本语法

1.什么是NSPredicate apple官方文档这样写的: The NSPredicate class is used to define logical conditions used to constrain a search either for a fetch or for in-memory filtering. (NSPredicate类是通过定义逻辑条件来约束获取或内存中的过滤搜索。)

2.基本语法 (大小写都可以,但是更推荐使用大写来表示这些保留字) 只要我们使用谓词(NSPredicate)都需要为谓词定义谓词表达式,而这个表达式必须是一个返回BOOL的值。 谓词表达式由表达式、运算符和值构成。如 SELF = 123

​ (1) 比较运算符 = 和 == 没有赋值一说 都是判断是否相等

​ (2) >= <= > < != <> 除此之外还有BETWEEN判定是否在之间

​ /* 符合条件之间范围的值 SELF>1 && SELF<10

​ OR   逻辑或 有一个满足就输出

​ NOT ! 逻辑非 取反

​ */

// between
int testNumber = ; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BETWEEN {1, 10}"]; if ([predicate evaluateWithObject:[NSNumber numberWithInteger:testNumber]]) { NSLog(@"testString:%d", testNumber); } else { NSLog(@"不符合条件"); }

(3)字符串比较运算符

​ BEGINWITH 检查某字符是否以指定的字符串开头

​ eg: 是否以a开头 则为 BEGINSWITH ‘a’

​ ENDSWITH 以()为结尾

​ CONTAINS 是否包含

​ LIKE 检查某个字符串是否匹配指定的字符串模板, 其之后可以跟?和两个通 配符 (?代表一个字符 代表任意多个字符)

 	eg: "name LIKE'?ac*'"  表示name的第2 3个字符是ac则返回YES
"name LIKE'*ac*'" 表示name包含ac则返回YES

​ MATCHES 检查某个字符串是否匹配指定的正则表达式

(4)集合运算符

​ ANY、SOME:集合中任意一个元素满足条件,就返回YES。

​ ALL:集合中所有元素都满足条件,才返回YES。

​ NONE:集合中没有任何元素满足条件就返回YES。如:NONE person.age < 18,表示person集合中所有元素的age>=18时,才返回YES。

​ IN:等价于SQL语句中的IN运算符,只有当左边表达式或值出现在右边的集合中才会返回YES。

array[index]:返回array数组中index索引处的元素

array[FIRST]:返回array数组中第一个元素

array[LAST]:返回array数组中最后一个元素

array[SIZE]:返回array数组中元素的个数

二、NSPredicate 的用法

(1) 定义谓词

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BETWEEN {1, 10}"];
(2)(重难点模块)使用谓词过滤集合

​ 此部分是我们需要掌握的重点,因为从这里我们就可以看到谓词的真正的强大之处

​ 其实谓词本身就代表了一个逻辑条件,计算谓词之后返回的结果永远为BOOL类型的值。而谓词最常用的功能就是对集合进行过滤。

​ ********重点**********

​当程序使用谓词对集合元素进行过滤时,程序会自动遍历其元素,并根据集合元素来计算谓词的值,当这个集合中的元素计算谓词并返回YES时,这个元素才会被保留下来。

​ ***********************

​ ps:请注意程序会自动遍历其元素,它会将自动遍历过之后返回为YES的值重新组合成一个集合返回。

  NSArray提供了如下方法使用谓词来过滤集合

  - (NSArray<ObjectType> *)filteredArrayUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSArray集合,返回符合条件的元素组成的新集合
 NSMutableArray提供了如下方法使用谓词来过滤集合
  - (void)filterUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSMutableArray,剔除集合中不符合条件的元素
 ​ NSSet提供了如下方法使用谓词来过滤集合
  - (NSSet<ObjectType> *)filteredSetUsingPredicate:(NSPredicate *)predicate NS_AVAILABLE(10_5, 3_0):作用同NSArray中的方法
​ 
  
  NSMutableSet提供了如下方法使用谓词来过滤集合
  -(void)filterUsingPredicate:(NSPredicate *)predicate NS_AVAILABLE(10_5, 3_0):作用同NSMutableArray中的方法。
通过上面的描述可以看出,使用谓词过滤不可变集合和可变集合的区别是:过滤不可变集合时,会返回符合条件的集合元素组成的新集合;过滤可变集合时,没有返回值,会直接剔除不符合条件的集合元素


最新文章

  1. C# ASP.NET MVC 图片盗链 加水印 的问题
  2. 配置ubuntu 16.04.1 LTS odoo 10.0开发环境
  3. hibernate的主键生成策略
  4. UIFontFamily
  5. mysql rr 查询出现的事务情况
  6. jQuery、实例大全
  7. Android(java)学习笔记244:多媒体之SurfaceView
  8. 表单同时有中文字段和文件上传,加上enctype=&quot;multipart/form-data&quot;后导致的中文乱码问题
  9. UpdateWindow API函数的作用很明显
  10. FineUI开发实践
  11. webpack,配置,上手,例子
  12. no module named selenium
  13. 使用PyQT开发图形界面程序
  14. Lock和Condition在JDK中ArrayBlockingQueue的应用
  15. Python3函数式编程
  16. Redis数据库高级实用特性:持久化机制
  17. Linux系统安装过程
  18. Oracle中B-TREE索引的深入理解(转载)
  19. leetcode965
  20. 论坛遇到附件上传失败问题总结(discuz)

热门文章

  1. 二、点击导出按钮创建excle写入内容后下载功能实现
  2. n/20 文本框动态监听输入长度
  3. Day10 - D - 矿场搭建 HYSBZ - 2730
  4. IdentityServer4专题之七:Authorization Code认证模式
  5. bootstrap fileinput控件上传文件大小限制
  6. Spring框架中的JDK与CGLib动态代理
  7. 2.Jsoup
  8. 深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别
  9. REVISITING FINE-TUNING FOR FEW-SHOT LEARNING
  10. 针对phpstudy默认设置的利用