1 #pragma mark - 谓词基本使用
2 - (void)demo1
3 {
4 // 谓词的用处是用来判断对象是否符合某种要求
5 // predicateWithFormat指定谓词匹配的条件
6 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self CONTAINS 'ao'"];
7
8 NSString *str = @"hello";
9
10 // 用谓词来匹配字符串
11 if ([predicate evaluateWithObject:str]) {
12 NSLog(@"符合条件");
13 } else {
14 NSLog(@"不符合条件");
15 }
16 }
17
18 #pragma mark - 匹配数组
19 - (void)demo2
20 {
21 // 准备数据
22 NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:30];
23
24 for (NSInteger i = 0; i < 30; i++) {
25 NSString *name = [NSString stringWithFormat:@"ID:%04d", arc4random_uniform(10000)];
26 NSInteger age = arc4random_uniform(20) + 15;
27
28 Person *p = [Person personWithName:name age:age];
29
30 [arrayM addObject:p];
31 }
32 // 需求:
33 // 1> 姓名中包含"8"字符串的名字
34 // 2> 查询年龄范围在 18 和 22 之间的
35 // CONTAINS[cd]在匹配字符串时,不区分大小写,不区分注音符号
36 // NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age BETWEEN {18, 22} && name CONTAINS[cd] '8'"];
37
38 // 使用谓词对对象进行匹配时,是通过KVC进行匹配的,指定keyPath,需要用%K
39 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS '8'", @"name"];
40
41 // 对数组进行过滤
42 NSLog(@"匹配结果 %@", [arrayM filteredArrayUsingPredicate:predicate]);
43 }