有点类似与SQL语句,主要功能使用来查找过滤数组,匹配字符串合数值。需要了解一点KVC。
老老实实跟着apple来吧,先创建一个类Car,代码如下
#import <Foundation/Foundation.h>
@interface Car : NSObject {
NSString *name;
int power;
}
@property (nonatomic,retain) NSString *name;
@property int power;
+(id)carWithName:(NSString*)n P:(int)p;
@end
#import "Car.h"
@implementation Car
@synthesize name,power;
+(id)carWithName:(NSString*)n P:(int)p{
Car *c = [[[self alloc] init] autorelease];
c.name = n;
c.power = p;
return c;
}
@end
在使用的时候创建一个大的数组
NSArray *array = [NSArray arrayWithObjects:
[Car carWithName:@"m1" P:1],
[Car carWithName:@"m2" P:2],
[Car carWithName:@"m3" P:3],
[Car carWithName:@"m4" P:4],
[Car carWithName:@"m5" P:5],
[Car carWithName:@"m6" P:6],
[Car carWithName:@"m7" P:7],nil
//我们象找出所有power 在某个范围的车,比如power<6,创建如下Predicate (这里可以用到所有的比较操作符)
NSPredicate *pre = [NSPredicate predicateWithFormat:@"self.power<6"]; //self可以去掉
//通过遍历输出我们要的结果
for (Car *c in array) {
if ([pre evaluateWithObject:c]) {
NSLog(@"%@",c.name);
}
}
但是这样做并不能简化我们的代码,我们还需要所有符合条件的集合,过滤器正好解决这一问题
NSPredicate *pre = [NSPredicate predicateWithFormat:@"self.power<6"];
NSArray *result = [array filteredArrayUsingPredicate:pre]; //result是我们需要的结果
如果需要带多个参数,可以使用predicateWithSubstitutionVariables,后面的NSDictionary就是需要的键值对,通过关键字来获取值
另外可以用BETWEEN,IN,BEGINWITH,ENDWITH,CONTAINS,LIKE这些谓词来构造NSPredicate,必要的时候使用SELF直接对自己进行匹配