关于NSPredicate的其他说明和注意事项,以及技巧

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

NSPRedicate中主要的几种运算方式1.比较运算符 > 、< 、== 、 >= 、<= 、 !=

例:@"number >= 99"

2.逻辑运算符:AND、OR、NOT 这几个运算符计算并、或、非的结果。

3.范围运算符:IN 、BETWEEN

例:@"number BETWEEN {1,5}"

@"address IN {'shanghai','nanjing'}"

4.字符串本身:SELF

例:@"SELF == 'APPLE'"

5.字符串相关:BEGINSWITH、ENDSWITH、CONTAINS

例: @"name CONTAIN[cd] 'ang'" //包含某个字符串

@"name BEGINSWITH[c] 'sh'" //以某个字符串开头

@"name ENDSWITH[d] 'ang'" //以某个字符串结束

注:[c]不区分大小写 , [d]不区分发音符号即没有重音符号 , [cd]既不区分大小写,也不区分发音符号。

6.通配符:LIKE

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

@"name LIKE[cd] '???er*'"

7.正则表达式:MATCHES

例:NSString *regex = @"^A.+e$"; //以A开头,e结尾

@"name MATCHES %@",regex

用NSPredicate筛选两个数组的差异

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

上面的代码输出结果 arr3={@"cc" ,@"dd"}

用NSPredicate筛选数组

NSString *regex = @"^A.+e$";//以A 开头,以e 结尾的字符。

NSPredicate *pre= [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

if([pre evaluateWithObject: @"Apple"]){

NSLog(@"YES");

}else{

NSLog(@"NO");

}

关于NSPredicate的其他说明和注意事项,以及技巧动态属性名

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

显然代码没有任何问题,但是这个不是最好的写法我建议如下写法:

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

NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:

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

NSPredicate *pre=[preTemplate predicateWithSubstitutionVariables: dic];

这样看上去可能会让代码逻辑更清晰。

当过滤条件字段都是动态的时候NSString *key = @"name";

NSString *value = @"name1";

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

然后当你执行到第三行的时候代码就会报错!

逻辑上没错误啊!!!为什么会出错呢?

NSPredicate要自动添加引号,所以最后得到的格式应该是@"'name' = 'name1'"。明显不对。要做的就是:

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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航