NSPredicate 用于执行搜素或内存中的过滤操作。
predicateWithFormat:方法在创建NSPredicate对象调用,填写一个谓词字符串作为参数
eg:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"name like 's*'"];
predicateWithSubstitutionVariables:用于NSPredicate声明后,设置参数值,参数为字典型数据
eg:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"name contains $substr"];
NSPredicate *pred1 = [pred predicateWithSubstitutionVariables:[NSDictionary dictionaryWithObjectsAndKeys:@ "sun", @"substr", nil]];
evaluateWithObject:方法返回BOOL类型值,用来判断是否搜到结果
eg:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"name like 's*'"];
User *user1 = [[User alloc] initWithName:@"sun" pass:@"123"];
BOOL result1 = [pred evaluateWithObject:user1];
使用谓词过滤集合元素的方法
- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate;//使用指定的谓词过滤NSArray集合,返回该集合中符合谓词条件的元素组成新集合
- (void)filterUsingPredicate:(NSPredicate *)predicate;//使用指定的谓词过滤NSMutableArray集合,剔除该集合中不符合条件的元素
- (NSSet *)filteredSetUsingPredicate:(NSPredicate *)predicate;//使用指定的谓词过滤NSSet集合,返回该集合中符合谓词条件的元素组成新集合
- (void)filterUsingPredicate:(NSPredicate *)predicate;//使用指定的谓词过滤NSMutableSet集合,剔除该集合中不符合条件的元素
eg:
NSMutableArray *array = [NSMutableArray arrayWithObjects:[NSNumber numberWithInt:50],
[NSNumber numberWithInt:42],
[NSNumber numberWithInt:20],
[NSNumber numberWithInt:64],
[NSNumber numberWithInt:56],
nil];
//创建谓词,要求该对象自身的值大于50
NSPredicate *pred = [NSPredicate predicateWithFormat:@"self > 50"];
//使用谓词执行过滤,过滤后只剩下值大于50的集合元素
[array filteredArrayUsingPredicate:pred];
NSLog(@"值大于50的元素:%@", array);
在谓词表达式中支持%K(用于动态传入属性名)、%@两种占位符