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];



你可能感兴趣的:(Obj-C的谓词语法)