iOS随心记_夏点

NSPredicate过滤数据(自己分离后台数据)

2016-07-19  本文已影响135人  夏点

刚开始接触这个类是在textfield中正则表达时验证输入文本的状态下,例子:

 NSString * pattern = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[06-8])\\d{8}$";

 NSPredicate * pred=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",pattern];

通过正则表达式判断所输入字符是否符合规范

1、然而还是小看了这个类,过滤作用十分强大,有好多的关键字

举个例子:

加入app中某一接口中有4张图片,而要求分成俩组,后台会给你一个字段作为标识进行分组

模拟一下json解析下来数据创建个字典

NSDictionary *dic= @{

@"picture":@[

@{

@"groupId" : @"1",

@"picUrl" : @"app/pic1.jpg"

},

@{

@"groupId" : @"1",

@"picUrl" : @"app/pic2.jpg"

},

@{

@"groupId" : @"2",

@"picUrl" : @"app/pic3.jpg"

},

@{

@"groupId" : @"2",

@"picUrl" : @"app/pic4.jpg"

}

]

};

用数据时你会建立一个模型来接收数据,模型就叫picModel吧

@property(nonatomic,strong)NSString *picUrl;

@property(nonatomic,strong)NSString *groupId;

我们创建一个可变数组把模型都存进去mutableArr,这里有4个picModel

NSArray *dataArr=dic[@"picture"];

NSMutableArray *mutableArr=[[NSMutableArray alloc]init];

for (NSDictionary *dic in dataArr) {

picModel *pm=[[picModel alloc]init];

pm.picUrl=dic[@"picUrl"];

pm.groupId=dic[@"groupId"];

[mutableArr addObject:pm];

}

//这时打印的数组元素个数是4个

NSLog(@"%zd",mutableArr.count);

创建一个谓词规则 就是groupId为1的过滤出来因为1是NSString类型所以得加引号那么写

NSPredicate *preGroup1=[NSPredicate predicateWithFormat:@"self.groupId='1'"];

NSPredicate *preGroup2=[NSPredicate predicateWithFormat:@"self.groupId='2'"];

重写一下description

-(NSString *)description{

[super description];

return [NSString stringWithFormat:@"ID=%@,URL=%@",self.groupId,self.picUrl];

}

运用规则得出对应数组 

NSArray *group1=[mutableArr filteredArrayUsingPredicate:preGroup1];

NSArray *group2=[mutableArr filteredArrayUsingPredicate:preGroup2];

NSLog(@"group1=%@",group1);

NSLog(@"group2=%@",group2);

打印出来看结果发现被分成俩组了

group1=(

"ID=1,URL=app/pic1.jpg",

"ID=1,URL=app/pic2.jpg"

)

group2=(

"ID=2,URL=app/pic3.jpg",

"ID=2,URL=app/pic4.jpg"

)

NSPredicate还有很多关键字 像contains,like等有些实际需求会用到

上一篇 下一篇

猜你喜欢

热点阅读