NSPredicate,谓词

简介: 原文地址:http://blog.csdn.net/holydancer/article/details/7380799 在语言上,谓语,谓词是用来判断的,比如“我是程序猿”中的是,就是表判断的谓语, “是”就是一个谓词,在objective-c中,应该说在COCOA中的NSPredicate表示的就是一种判断。

 

原文地址:http://blog.csdn.net/holydancer/article/details/7380799

在语言上,谓语,谓词是用来判断的,比如“我是程序猿”中的是,就是表判断的谓语, “是”就是一个谓词,在objective-c中,应该说在COCOA中的NSPredicate表示的就是一种判断。一种条件的构建。我们可以先通过 NSPredicate中的predicateWithFormat方法来生成一个NSPredicate对象表示一个条件,然后在别的对象中通过 evaluateWithObject方法来进行判断,返回一个布尔值。还是看代码简单明了:
[plain] view plain copy
  1. #import <Foundation/Foundation.h>  
  2. @interface Human :NSObject  
  3. {  
  4.     NSString *name;  
  5.     int age;  
  6.     Human *child;  
  7.       
  8. }  
  9. @property (copy)NSString *name;  
  10. @property int age;  
  11. @end  
  12. @implementation Human  
  13. @synthesize name;  
  14. @synthesize age;  
  15.   
  16.   
  17. @end  
  18. int main(int argc, const char * argv[])  
  19. {  
  20.   
  21.     @autoreleasepool {  
  22.         //利用kvc进行对象初始化  
  23.         Human *human = [[Human alloc]init];  
  24.         Human *child = [[Human alloc]init];  
  25.         [human setValue:@"holydancer" forKey:@"name"];  
  26.         [human setValue:[NSNumber numberWithInt:20] forKey:@"age"];  
  27.         [human setValue:child forKey:@"child"];  
  28.         [human setValue:[NSNumber numberWithInt:5] forKeyPath:@"child.age"];  
  29.           
  30.         NSPredicate *predicate1=[NSPredicate predicateWithFormat:@"name=='holydancer'"];//创建谓词判断属性  
  31.         NSPredicate *predicate2=[NSPredicate predicateWithFormat:@"child.age==5"];//创建谓词判断属性的属性  
  32.         //此处在创建谓词时可以有好多种条件写法,比如大小比较,范围验证,甚至像数据库操作那样的like运算符,这里就不一一列举了  
  33.           
  34.         BOOL tmp1=[predicate1 evaluateWithObject:human];//验证谓词是否成立,得到布尔返回值  
  35.         BOOL tmp2=[predicate2 evaluateWithObject:human];  
  36.         if (tmp1) {  
  37.             NSLog(@"human对象的name属性为'holydancer'");  
  38.         }  
  39.         if (tmp2) {  
  40.             NSLog(@"human对象的child属性的age为5");  
  41.   
  42.         }  
  43.           
  44.   }  
  45.     return 0;  
  46. }  

 

2012-03-21 19:59:42.668 predicate[2246:403] human对象的name属性为'holydancer'

2012-03-21 19:59:42.670 predicate[2246:403] human对象的child属性的age5


灵活多变,我们暂且掌握到这里便足够了。另外,到今天为止,我们的objective-c基础就告一段落了,马上我要推出IPhone开发的教学 博客,希望大家继续关注。如果我之前的博客有什么错误的地方或者不够清楚的,可以评论告诉我,最后,感谢关注。

img_e00999465d1c2c1b02df587a3ec9c13d.jpg
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

目录
相关文章
|
5月前
|
C++
83 C++ - 谓词
83 C++ - 谓词
16 0
|
15天前
|
算法 C++
C++一元谓词和二元谓词
C++一元谓词和二元谓词
离散数学-考纲版-02-谓词
离散数学-考纲版-02-谓词
|
3月前
|
SQL 开发框架 .NET
C#进阶-LINQ表达式之GroupBy分组查询
本篇文章我们将演示LINQ扩展包基础语法里的GroupBy分组查询,并实现投影等实际操作中常用的类型转换手法。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
58 0
|
10月前
|
SQL 数据库
tkMapper之使用Weekend拼接条件进行条件查询
tkMapper之使用Weekend拼接条件进行条件查询
193 0
|
10月前
|
关系型数据库 MySQL 索引
避免在where子句中使用!=或<>操作符
避免在where子句中使用!=或<>操作符
|
10月前
WHERE子句操作符
WHERE子句操作符
23 0
|
关系型数据库 MySQL 索引
七、避免在where子句中使用!=或<>操作符
七、避免在where子句中使用!=或<>操作符
155 0
|
Java Spring
Gataway中的Predicate的使用
说白了,Predicate就是为了实现一组匹配规则,让请求过来找到对应的Route进行处理。
Gataway中的Predicate的使用