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];
相關文章
相關標籤/搜索