国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

NSPredicate簡(jiǎn)單介紹

2019-11-14 18:43:25
字體:
供稿:網(wǎng)友

NSPRedicate中主要的幾種運(yùn)算方式

1.比較運(yùn)算符 > 、< 、== 、 >= 、<= 、 !=
例:@"number >= 99"

2.邏輯運(yùn)算符:AND、OR、NOT 這幾個(gè)運(yùn)算符計(jì)算并、或、非的結(jié)果。

3.范圍運(yùn)算符:IN 、BETWEEN
例:@"number BETWEEN {1,5}"
@"address IN {'shanghai','nanjing'}"

4.字符串本身:SELF
例:@"SELF == 'APPLE'"

5.字符串相關(guān):BEGINSWITH、ENDSWITH、CONTAINS
例: @"name CONTAIN[cd] 'ang'" //包含某個(gè)字符串
@"name BEGINSWITH[c] 'sh'" //以某個(gè)字符串開頭
@"name ENDSWITH[d] 'ang'" //以某個(gè)字符串結(jié)束
注:[c]不區(qū)分大小寫 , [d]不區(qū)分發(fā)音符號(hào)即沒有重音符號(hào) , [cd]既不區(qū)分大小寫,也不區(qū)分發(fā)音符號(hào)。

6.通配符:LIKE
例:@"name LIKE[cd] '*er*'" //*代表通配符,Like也接受[cd].
@"name LIKE[cd] '???er*'"

7.正則表達(dá)式:MATCHES
例:NSString *regex = @"^A.+e$"; //以A開頭,e結(jié)尾
@"name MATCHES %@",regex

用NSPredicate篩選兩個(gè)數(shù)組的差異

NSArray* array = @[@"aa",@"bb"];NSArray* array2 = @[@"aa",@"bb",@"cc",@"dd"];NSPredicate* thePredicate = [NSPredicate predicateWithFormat:@"NOT(SELF in %@)",array];NSArray* arr3 = [array2 filteredArrayUsingPredicate:thePredicate];NSLog(@"%@",arr3);

上面的代碼輸出結(jié)果 arr3={@"cc" ,@"dd"}

 

用NSPredicate篩選數(shù)組

NSString *regex = @"^A.+e$";//以A 開頭,以e 結(jié)尾的字符。NSPredicate *pre= [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];if([pre evaluateWithObject: @"Apple"]){

    NSLog(@"YES");

}else{

   NSLog(@"NO");

}

 

關(guān)于NSPredicate的其他說明和注意事項(xiàng),以及技巧

動(dòng)態(tài)屬性名

NSPredicate *p = [NSPredicate predicateWithFormat:@"name = %@", @"name1"];

顯然代碼沒有任何問題,但是這個(gè)不是最好的寫法我建議如下寫法:

NSPredicate *preTemplate = [NSPredicate predicateWithFormat:@"name==$NAME"];

NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:

@"name1", @"NAME",nil];

NSPredicate *pre=[preTemplate predicateWithSubstitutionVariables: dic];

這樣看上去可能會(huì)讓代碼邏輯更清晰。

當(dāng)過濾條件字段都是動(dòng)態(tài)的時(shí)候

NSString *key = @"name";     NSString *value = @"name1";      NSPredicate *p = [NSPredicate predicateWithFormat:@"%@ = %@", key, value];

然后當(dāng)你執(zhí)行到第三行的時(shí)候代碼就會(huì)報(bào)錯(cuò)!

邏輯上沒錯(cuò)誤啊!!!為什么會(huì)出錯(cuò)呢?
NSPredicate要自動(dòng)添加引號(hào),所以最后得到的格式應(yīng)該是@"'name' = 'name1'"。明顯不對(duì)。要做的就是:

NSPredicate *p = [NSPredicate predicateWithFormat:@"%K = %@", key, value];

 

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 磐石市| 新闻| 文成县| 靖边县| 姜堰市| 铜山县| 资源县| 新巴尔虎右旗| 庐江县| 沙湾县| 准格尔旗| 湟源县| 阿合奇县| 工布江达县| 大田县| 民和| 安龙县| 涞源县| 博兴县| 大悟县| 岳西县| 长垣县| 资溪县| 泰宁县| 和田县| 黄平县| 图片| 图们市| 黎平县| 临桂县| 都匀市| 白水县| 凉山| 泾川县| 田东县| 滦南县| 临湘市| 根河市| 姜堰市| 赞皇县| 桓台县|