謂詞用于定義一個(gè)邏輯條件 而通過(guò)這樣的條件執(zhí)行搜索域或內(nèi)存中的過(guò)濾條件它呀;
1.謂詞的定義
謂詞由NSPredicate來(lái)表示棒厘,它有3個(gè)子類(lèi):NSComparisonPredicate,NSCompoundPredicate,NSExpression但是我們平時(shí)常用的是直接用NSPredicate的predicateWithFormat:方法來(lái)實(shí)現(xiàn),zap在創(chuàng)建完謂詞后如果沒(méi)有占位符參數(shù)奢人,就可以直接用evaluateWithObject:來(lái)計(jì)算結(jié)果淆院,如果有占位符參數(shù)的話(huà)我們需要再加一步predicateWithSubstitutionVariable:來(lái)給占位符參數(shù)設(shè)置值
SELF 指本身 如下面取出大于15的
NSArray *fiterArry = @[@10,@18,@19];
NSPredicate *Pridicate = [NSPredicate predicateWithFormat:@"SELF > 15"];
當(dāng)然我們謂詞常用的場(chǎng)所是對(duì)集合類(lèi)的過(guò)濾(都是大多以filter..開(kāi)始的方法)
2在謂詞中使用占位符參數(shù)
也許我們發(fā)現(xiàn)在指定過(guò)濾條件的時(shí)候在fromat:...后面我們總是只能用固定的值和屬性比較 在實(shí)際開(kāi)發(fā)中這樣更不沒(méi)用 所以有了占位符參數(shù)
%K 該占位符用于傳入動(dòng)態(tài)的屬性名
%@用于動(dòng)態(tài)設(shè)置屬性的值
再次之外 我們還可以使用動(dòng)態(tài)改變的屬性值
[NSPredicate predicateWithFormat:@"name CONTAINS $SUBSTR"];
在這個(gè)時(shí)候我們要調(diào)用predicateWithSubstitutionVariables:給占位符參數(shù)設(shè)置值
NSString *kk=@"name";
NSString *value =@"zhang";
//? ? NSMutableArray *arr =[@[@10,@30,@39,@45]mutableCopy];
NSPredicate *prit= [NSPredicate predicateWithFormat:@"%K CONTAINS %@",kk,value];
3謂詞表達(dá)式語(yǔ)法
1基本的比較運(yùn)算符
=支救,==拷淘,>=,=>,<=,=<,>,<,!=,<>,BETWEEN
2基本的邏輯運(yùn)算符
AND.&&,OR,||,NOT,!
3,字符串比較運(yùn)算符
BEGINS WITH,ENDSWITH,CONTAINS,LIKE(重點(diǎn)說(shuō)下like后面允許用*和??jī)蓚€(gè)通配符*代表多個(gè)贬堵?代表一個(gè)如"name LIKE *s*")表示包含有s MATCHES(后面使用正則表達(dá)式)[注意在字符串運(yùn)算符中區(qū)分大小寫(xiě)和重青音黎做,如“name BEGINSWITH 'zk'”]當(dāng)name是Zk時(shí)它是返回NO的 我們?nèi)绻粎^(qū)分大小寫(xiě)用[c],不區(qū)分重輕音[d]可以混用
4操作運(yùn)算符ANY SOME(只要有酒返回yes)ALL全部是菜返回ye s NONE沒(méi)有一個(gè)滿(mǎn)足返回ye s IN(左邊的值包含在右邊)