標籤:
iOS Predicate 即謂詞邏輯。和資料庫的SQL語句具有相似性,都是從資料堆中根據條件進行篩選。
1.使用情境:
(1)NSPredicate給我留下最深印象的是兩個數組求交集的一個需求,如果按照一般寫法,需要2個遍曆,但NSArray提供了一個filterUsingPredicate的方法,用了NSPredicate,就可以不用遍曆!
(2)在儲存自訂對象的數組中,可以根據條件查詢數組中滿足條件的對象。
2.首先熟悉Predicate:
NSArray *array1 = [NSArray arrayWithObjects:@1,@2,@3,@5,@5,@6,@7, nil];
NSArray *array2 = [NSArray arrayWithObjects:@4,@5, nil];
// 表示篩選array1在array2中的元素!YES!其中SELF指向filteredArrayUsingPredicate的調用者。
/*測試方案:
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF in %@",array2];
NSArray *temp1 = [array1 filteredArrayUsingPredicate:predicate1];
//表示array1在array2中元素
結果:
2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5
2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"SELF in %@",array1];
NSArray *temp1 = [array2 filteredArrayUsingPredicate:predicate1];
結果:
2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5
*/
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF in %@",array2];
NSArray *temp1 = [array1 filteredArrayUsingPredicate:predicate1];
[temp1 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"temp1 = %@",obj);
}];
/*
2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5
2015-11-08 10:55:19.879 NSPredicateDemo[11595:166012] obj ==5
*/
3.基本文法
(1)比較子>,<,==,>=,<=,!=
可用於數值及字串
(2)範圍運算子:IN、BETWEEN
例:@"number BETWEEN {1,5}"
@"address IN {‘shanghai‘,‘beijing‘}"
(3)字串本身:SELF
例:@“SELF == ‘APPLE’"
(4)字串相關:BEGINSWITH、ENDSWITH、CONTAINS
例:@"name CONTAIN[cd] ‘ang‘" //包含某個字串
@"name BEGINSWITH[c] ‘sh‘" //以某個字串開頭
@"name ENDSWITH[d] ‘ang‘" //以某個字串結束
注:[c]不區分大小寫[d]不區分發音符號即沒有重音符號[cd]既不區分大小寫,也不區分發音符號。
(5)萬用字元:LIKE
例:@"name LIKE[cd] ‘*er*‘" //*代表萬用字元,Like也接受[cd].
@"name LIKE[cd] ‘???er*‘"
文/九零猴VS久林(簡書作者)
原文連結:http://www.jianshu.com/p/b2694972863e
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。
iOS NSPredicate的學習講解