NSPredicate 谓词
Cocoa提供了一个名为NSPerdicate的类,它用于制定过滤器的条件。
可以创建NSPredicate的对象,通过他准确的描述所需的条件,通过谓词筛选每个对象,判断他们是否与条件相匹配。
说了这么抽象的,还是来点实际的;
谓词创建:
NSPredicate *predicate;
predicate = [NSPredicate predicateWithForm :name =='xiaoming'];
BOOL match = [predicate evaluateWithObject:stu];
NSLog("%s",(match)?"YES":"NO");
evaluateWithObject 这个方法是通过接收对象(即谓词)根据指定的对象计算自身的值。
stu 是一个对象。name 是自身的一个属性(内容为字符串)。
假如上个例子中stu这个对象里name等于小明,最后打印出来的就是“YES”。反之为“NO”。
数组过滤器
这是谓词的一个应用。
NSArray *stus = [stu];
//建立一个学生的数组
NSAraay *results;
//建立一个结果数组,将学上结果信息存起来
results = [stus filteredArrayUsingPredicate:predicate];
NSLog("%@",results);
结果:
小明,18
小刚,20
小聪,19
这是学生所有的信息,我们可以用KVC(键/值编码)提取其中的名字,将valueForkey:发送给数组时,键将作用于数组中所有的元素。
NSArray *names;
names = [results valueForKey:@"name"];
NSLog("%@",names);
结果:
小明,
小刚,
小聪
还有,想要输出所有年龄在19岁以上的可以用这种方法:
就是在创建谓词是name = ’xiaoming‘ 改为 age >= 19 就可以啦!
谓词查找经常用于搜索与筛选,后面还会介绍模糊查找。
韩钊