NSPredicate的使用
2016-10-28 16:28
134 查看
%K:用于动态传入属性名
%@:用于动态设置属性值
1、比较运算符:
=、==:判断两个表达式是否相等,在谓词中=和==是相同的意思都是判断,而没有赋值这一说
>=,=>:判断左边表达式的值是否大于或等于右边表达式的值
<=,=<:判断右边表达式的值是否小于或等于右边表达式的值
>:判断左边表达式的值是否大于右边表达式的值
<:判断左边表达式的值是否小于右边表达式的值
!=、<>:判断两个表达式是否不相等
如果与字符串比较需要加上单引号如@“ self = ‘music’ ”
结果:1
2、逻辑运算符
AND、&&:逻辑与,要求两个表达式的值都为YES时,结果才为YES。
OR、||:逻辑或,要求其中一个表达式为YES时,结果就是YES
NOT、
!:逻辑非,对原有的表达式取反
xxxx: zhansan,25
3、字符串比较运算符
BEGINSWITH:检查某个字符串是否以指定的字符串开头(如判断字符串是否以a开头:BEGINSWITH 'a')
ENDSWITH:检查某个字符串是否以指定的字符串结尾
CONTAINS:检查某个字符串是否包含指定的字符串
LIKE:检查某个字符串是否匹配指定的字符串模板。其之后可以跟?代表一个字符和*代表任意多个字符两个通配符。比如"name LIKE '*ac*'",这表示name的值中包含ac则返回YES;"name LIKE '?ac*'",表示name的第2、3个字符为ac时返回YES。
MATCHES:检查某个字符串是否匹配指定的正则表达式。虽然正则表达式的执行效率是最低的,但其功能是最强大的,也是我们最常用的。
注:字符串比较都是区分大小写和重音符号的。其中[c]是不区分大小写,[d]是不区分重音符号,
[cd]不区分重音也不区分大小写
结果:0
结果:1
正则:
4、集合运算符
ANY、SOME:集合中任意一个元素满足条件,就返回YES。如:ANY person.age >= 18
ALL:集合中所有元素都满足条件,才返回YES。如: ALL person.age >= 18
NONE:集合中没有任何元素满足条件就返回YES。如:NONE person.age < 18,表示person集合中所有元素的age>=18时,才返回YES。
IN:等价于SQL语句中的IN运算符,只有当左边表达式或值出现在右边的集合中才会返回YES。
结果:xxxx:: a, 1
array[index]:返回array数组中index索引处的元素
array[FIRST]:返回array数组中第一个元素
array[LAST]:返回array数组中最后一个元素
array[SIZE]:返回array数组中元素的个数
其他:
FALSE、NO:代表逻辑假
TRUE、YES:代表逻辑真
NULL、NIL:代表空值
SELF:代表正在被判断的对象自身
"string"或'string':代表字符串
数组:和c中的写法相同,如:{'a', 'b', 'cds'}。
NSArray提供了如下方法使用谓词来过滤集合
- (NSArray*)filteredArrayUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSArray集合,返回符合条件的元素组成的新集合
NSMutableArray提供了如下方法使用谓词来过滤集合
- (void)filterUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSMutableArray,剔除集合中不符合条件的元素
NSSet提供了如下方法使用谓词来过滤集合
- (NSSet*)filteredSetUsingPredicate:(NSPredicate *)predicate NS_AVAILABLE(10_5, 3_0):作用同NSArray中的方法
NSMutableSet提供了如下方法使用谓词来过滤集合
- (void)filterUsingPredicate:(NSPredicate *)predicate NS_AVAILABLE(10_5, 3_0):作用同NSMutableArray中的方法。
通过上面的描述可以看出,使用谓词过滤不可变集合和可变集合的区别是:过滤不可变集合时,会返回符合条件的集合元素组成的新集合;过滤可变集合时,没有返回值,会直接剔除不符合条件的集合元素
%@:用于动态设置属性值
1、比较运算符:
=、==:判断两个表达式是否相等,在谓词中=和==是相同的意思都是判断,而没有赋值这一说
>=,=>:判断左边表达式的值是否大于或等于右边表达式的值
<=,=<:判断右边表达式的值是否小于或等于右边表达式的值
>:判断左边表达式的值是否大于右边表达式的值
<:判断左边表达式的值是否小于右边表达式的值
!=、<>:判断两个表达式是否不相等
如果与字符串比较需要加上单引号如@“ self = ‘music’ ”
NSString *str = @"music"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self = 'music'"]; BOOL b = [predicate evaluateWithObject:str]; NSLog(@"结果:%zd", b);结果:
结果:1
2、逻辑运算符
AND、&&:逻辑与,要求两个表达式的值都为YES时,结果才为YES。
OR、||:逻辑或,要求其中一个表达式为YES时,结果就是YES
NOT、
!:逻辑非,对原有的表达式取反
NSArray *arr = @[[[Person alloc] initWithName:@"mingzi" age:10], [[Person alloc] initWithName:@"a" age:1], [[Person alloc] initWithName:@"zhansan" age:25], ]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.age > 1 && self.name = 'zhansan' "]; NSArray *ar = [arr filteredArrayUsingPredicate:predicate]; NSLog(@"%@", ar); Person *p = ar.lastObject; NSLog(@"XXXXX::%@ , %d", p.name, p.age);结果:
xxxx: zhansan,25
3、字符串比较运算符
BEGINSWITH:检查某个字符串是否以指定的字符串开头(如判断字符串是否以a开头:BEGINSWITH 'a')
ENDSWITH:检查某个字符串是否以指定的字符串结尾
CONTAINS:检查某个字符串是否包含指定的字符串
LIKE:检查某个字符串是否匹配指定的字符串模板。其之后可以跟?代表一个字符和*代表任意多个字符两个通配符。比如"name LIKE '*ac*'",这表示name的值中包含ac则返回YES;"name LIKE '?ac*'",表示name的第2、3个字符为ac时返回YES。
MATCHES:检查某个字符串是否匹配指定的正则表达式。虽然正则表达式的执行效率是最低的,但其功能是最强大的,也是我们最常用的。
注:字符串比较都是区分大小写和重音符号的。其中[c]是不区分大小写,[d]是不区分重音符号,
[cd]不区分重音也不区分大小写
NSString *str = @"music"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self CONTAINS 'C'"]; BOOL b = [predicate evaluateWithObject:str]; NSLog(@"结果:%zd", b);结果:
结果:0
NSString *str = @"music"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self CONTAINS[c] 'C'"]; BOOL b = [predicate evaluateWithObject:str]; NSLog(@"结果:%zd", b);结果:
结果:1
正则:
NSString * regex = @"^[\u4E00-\u9FA5]+$"; NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; result = [pred evaluateWithObject:self.userNameTF.text]; if (!result) { [self showSuccessOrFailedMessage:@"姓名只能输入汉字"]; return; }
注:<span style="color: rgb(37, 37, 37); font-family: "Helvetica Neue", Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif; font-size: 14px; background-color: rgb(250, 250, 250);">只有在正则表达式为^表达式$时才使用谓词</span>
4、集合运算符
ANY、SOME:集合中任意一个元素满足条件,就返回YES。如:ANY person.age >= 18
ALL:集合中所有元素都满足条件,才返回YES。如: ALL person.age >= 18
NONE:集合中没有任何元素满足条件就返回YES。如:NONE person.age < 18,表示person集合中所有元素的age>=18时,才返回YES。
IN:等价于SQL语句中的IN运算符,只有当左边表达式或值出现在右边的集合中才会返回YES。
NSArray *arr1 = @[[[Person alloc] initWithName:@"mingzi" age:10], [[Person alloc] initWithName:@"a" age:1], [[Person alloc] initWithName:@"zhansan" age:25], [[Person alloc] initWithName:@"mingzi" age:15]]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.name in {'a'}"]; NSArray *ar = [arr1 filteredArrayUsingPredicate:predicate]; NSLog(@"%@", ar); Person *p = ar.lastObject; NSLog(@"XXXXX::%@ , %d", p.name, p.age);结果:
结果:xxxx:: a, 1
array[index]:返回array数组中index索引处的元素
array[FIRST]:返回array数组中第一个元素
array[LAST]:返回array数组中最后一个元素
array[SIZE]:返回array数组中元素的个数
其他:
FALSE、NO:代表逻辑假
TRUE、YES:代表逻辑真
NULL、NIL:代表空值
SELF:代表正在被判断的对象自身
"string"或'string':代表字符串
数组:和c中的写法相同,如:{'a', 'b', 'cds'}。
NSArray提供了如下方法使用谓词来过滤集合
- (NSArray*)filteredArrayUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSArray集合,返回符合条件的元素组成的新集合
NSMutableArray提供了如下方法使用谓词来过滤集合
- (void)filterUsingPredicate:(NSPredicate *)predicate:使用指定的谓词过滤NSMutableArray,剔除集合中不符合条件的元素
NSSet提供了如下方法使用谓词来过滤集合
- (NSSet*)filteredSetUsingPredicate:(NSPredicate *)predicate NS_AVAILABLE(10_5, 3_0):作用同NSArray中的方法
NSMutableSet提供了如下方法使用谓词来过滤集合
- (void)filterUsingPredicate:(NSPredicate *)predicate NS_AVAILABLE(10_5, 3_0):作用同NSMutableArray中的方法。
通过上面的描述可以看出,使用谓词过滤不可变集合和可变集合的区别是:过滤不可变集合时,会返回符合条件的集合元素组成的新集合;过滤可变集合时,没有返回值,会直接剔除不符合条件的集合元素
相关文章推荐
- objective-c中使用cocoa的NSPredicate,谓词(十四)
- iPhone开发:可爱的谓词,使用NSPredicate
- ios中NSPredicate的用法(正则表达式使用)
- IOS 正则和NSPredicate使用样例
- iOS中的谓词NSPredicate的使用
- NSPredicate 的使用(持续更新)
- CoreData 中使用 NSPredicate 过滤掉空值
- NSPredicate的使用方式
- iOS 中谓词的使用 NSPredicate
- NSPredicate的使用
- NSPredicate 基本使用
- iOS中正则表达式的使用--NSPredicate
- NSPredicate使用
- NSPredicate使用小结
- objective-c中使用cocoa的NSPredicate,谓词(十四)
- iOS中正则表达式的使用--NSPredicate
- NSPredicate及正则的一点使用
- core data 查询条件 NSPredicate使用
- NSPredicate 的使用(持续更新)
- CoreData用法三: NSPredicate在CoreData中的使用