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