NSPredicate 谓词

Cocoa 提供了 NSPredicate 类,用于指定过滤器的条件。可以创建 NSPredicate 对象,通过它准确地描述所需的条件,通过谓词筛选每一个对象,判断它们是否与条件相匹配。

NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormate:@"name == 'Join'"];
Bool ismatch = [predicate evaluateWithObject:person];//判断 person 类是否满足谓词条件

//常用作数组过滤器
NSArray *array=[@"abc",@"a bdc",@"abode",@"abcse",@"awessebsdewc",@"453abc",@"a45bc3433",@"abc34522",@"asdfad",@"alkmbc",@"abcopjoj",@"abjoc",@"khujabc",@"abc9074",]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", @"abc"];
//SELF 表示的是响应谓词计算的对象。[cd] 表示既不区分大小写,也不区分发音符号。[c] 表示不区分大写,[d] 表示不区分发音符号。
NSArray *resultArr = [array filteredArrayUsingPredicate:predicate];

谓词过滤的筛选条件:
1、逻辑运算符号(> , < , = , >= , <=) 。并且和 &&, || ,AND, OR 谓词一起使用不区分大小写。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"height > 180 && width > 30"];

2、范围运算符(IN,BETWEEN)。

NSPredicate *predicate = [NSPredicate predicateWithFormat:"height BETWEEN {10, 50}"]; 

3、字符串之开头和结尾(BEGINSWITH, ENDSWITH)
BEGINSWITH: 以...开头
ENDSWITH: 以...结尾

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH 'J'"];  

4、字符串之包含和模糊查询(CONTAINS,LIKE)
CONTAINS: 包含某个字符串
LIKE: 模糊查询

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name LIKE '*o*'"];

5、字符串匹配查询(SELF)

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", @"abc"];

6、正则表达式(MATCHES)

NSString *reg = @"^J.+n$";//以 J 开头,以 n 结尾的字符。  
NSPredicate *pre= [NSPredicate predicateWithFormat:@"SELF MATCHES %@", reg];  
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K CONTAINS[c] %@",preStr,keyStr];
//%@会被当作一个有引号的字符串的格式说明符,%d、%f是数字的格式说明符,后面添加对应格式的变量。
//需要改变键路径时,使用%K作为键路径的格式说明符。

你可能感兴趣的:(NSPredicate 谓词)