刚开始接触这个类是在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等有些实际需求会用到