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