iPhone开发:可爱的谓词,使用NSPredicate

有点类似与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直接对自己进行匹配

 

posted @ 2010-06-29 17:32  javawebsoa  Views(133)  Comments(0Edit  收藏  举报