Obj-C的谓词语法

NSPredicate类,能够指定过滤条件过滤对象集合中符合条件的对象。
NSPredicate对象能够准确地描述所需的条件,对每一个对象经过谓词进行筛选,判断它们是否与条件相匹配。
Car *car;
car = makeCar (@“Herbie”, @“Honda”, @“CRX”, 1984, 10000);
[garage addCar: car];
NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat:@“name ==‘Herbie’”];
// 对于字符串‘Herbie’,若是谓词字符串中的文本块未被引用,则该谓词字符串被看作是键路径;若是引用了文本块,则认为它是文本字符串。(上文中被引用,为文本字符串,一般使用单引号,这样不用转义)
BOOL match = [predicate evaluateWithObject: car]; //经过谓词计算对象
NSLog(@“%s”, (match)?”YES” : “NO”);

// 另外一个谓词
predicate = [NSPredicate predicateWithFormat:@“engine.horse > 150”]; //键路径
//predicate = [NSPredicate predicateWithFormat:@“engine.horse > %d”,150];//这里也能够不写死
//能够使用不少格式符
 match = [predicate evaluateWithObject: car];
// 对象集合
NSArray *array = [garage cars];
for(Car *car in [garage cars]){
	if([predicate evaluateWithObject: Car]){
		NSLog(@“%@”, car.name);
	}
}
//更简单和有效的作法
//-filteredArrayUnsignedPredicate 循环过滤数组内容,根据谓词计算每一个对象,并将
//YES对象累积到将被返回的数组中
NSArray *results;
results = [cars filteredArrayUnsignedPredicate: predicate];
NSLog(@“%@”, results); //输出的数组中全部的车辆,并打印每辆车的全部信息
NSArray *names;
names = [results valueForKey: @“name”];  //KVC做用于数组,将做用于数组的全部元素 
NSLog(@“%@”, results); //输出全部车辆名字

//剔除可变数组中不须要的全部项目
NSMutableArray *carsCopy = [cars mutableCopy];
[carsCopy filterUsingPredicate: predicate];
相关文章
相关标签/搜索