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直接对自己进行匹配

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值