NSPredicate,谓词
2013-12-13 10:45
99 查看
原文地址:/article/1358616.html
在语言上,谓语,谓词是用来判断的,比如“我是程序猿”中的是,就是表判断的谓语, “是”就是一个谓词,在objective-c中,应该说在COCOA中的NSPredicate表示的就是一种判断。一种条件的构建。我们可以先通过 NSPredicate中的predicateWithFormat方法来生成一个NSPredicate对象表示一个条件,然后在别的对象中通过 evaluateWithObject方法来进行判断,返回一个布尔值。还是看代码简单明了:
[plain] view plaincopy
#import <Foundation/Foundation.h>
@interface Human :NSObject
{
NSString *name;
int age;
Human *child;
}
@property (copy)NSString *name;
@property int age;
@end
@implementation Human
@synthesize name;
@synthesize age;
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
//利用kvc进行对象初始化
Human *human = [[Human alloc]init];
Human *child = [[Human alloc]init];
[human setValue:@"holydancer" forKey:@"name"];
[human setValue:[NSNumber numberWithInt:20] forKey:@"age"];
[human setValue:child forKey:@"child"];
[human setValue:[NSNumber numberWithInt:5] forKeyPath:@"child.age"];
NSPredicate *predicate1=[NSPredicate predicateWithFormat:@"name=='holydancer'"];//创建谓词判断属性
NSPredicate *predicate2=[NSPredicate predicateWithFormat:@"child.age==5"];//创建谓词判断属性的属性
//此处在创建谓词时可以有好多种条件写法,比如大小比较,范围验证,甚至像数据库操作那样的like运算符,这里就不一一列举了
BOOL tmp1=[predicate1 evaluateWithObject:human];//验证谓词是否成立,得到布尔返回值
BOOL tmp2=[predicate2 evaluateWithObject:human];
if (tmp1) {
NSLog(@"human对象的name属性为'holydancer'");
}
if (tmp2) {
NSLog(@"human对象的child属性的age为5");
}
}
return 0;
}
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属性的age为5
灵活多变,我们暂且掌握到这里便足够了。另外,到今天为止,我们的objective-c基础就告一段落了,马上我要推出IPhone开发的教学
博客,希望大家继续关注。如果我之前的博客有什么错误的地方或者不够清楚的,可以评论告诉我,最后,感谢关注。
在语言上,谓语,谓词是用来判断的,比如“我是程序猿”中的是,就是表判断的谓语, “是”就是一个谓词,在objective-c中,应该说在COCOA中的NSPredicate表示的就是一种判断。一种条件的构建。我们可以先通过 NSPredicate中的predicateWithFormat方法来生成一个NSPredicate对象表示一个条件,然后在别的对象中通过 evaluateWithObject方法来进行判断,返回一个布尔值。还是看代码简单明了:
[plain] view plaincopy
#import <Foundation/Foundation.h>
@interface Human :NSObject
{
NSString *name;
int age;
Human *child;
}
@property (copy)NSString *name;
@property int age;
@end
@implementation Human
@synthesize name;
@synthesize age;
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
//利用kvc进行对象初始化
Human *human = [[Human alloc]init];
Human *child = [[Human alloc]init];
[human setValue:@"holydancer" forKey:@"name"];
[human setValue:[NSNumber numberWithInt:20] forKey:@"age"];
[human setValue:child forKey:@"child"];
[human setValue:[NSNumber numberWithInt:5] forKeyPath:@"child.age"];
NSPredicate *predicate1=[NSPredicate predicateWithFormat:@"name=='holydancer'"];//创建谓词判断属性
NSPredicate *predicate2=[NSPredicate predicateWithFormat:@"child.age==5"];//创建谓词判断属性的属性
//此处在创建谓词时可以有好多种条件写法,比如大小比较,范围验证,甚至像数据库操作那样的like运算符,这里就不一一列举了
BOOL tmp1=[predicate1 evaluateWithObject:human];//验证谓词是否成立,得到布尔返回值
BOOL tmp2=[predicate2 evaluateWithObject:human];
if (tmp1) {
NSLog(@"human对象的name属性为'holydancer'");
}
if (tmp2) {
NSLog(@"human对象的child属性的age为5");
}
}
return 0;
}
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属性的age为5
灵活多变,我们暂且掌握到这里便足够了。另外,到今天为止,我们的objective-c基础就告一段落了,马上我要推出IPhone开发的教学
博客,希望大家继续关注。如果我之前的博客有什么错误的地方或者不够清楚的,可以评论告诉我,最后,感谢关注。
相关文章推荐
- RBAC 基于角色的访问控制
- 获取指定列中的连续数字
- Direct9学习之--------------------------实时阴影的另一种实现ShadowMap
- xp删除用户导致加密文件打不开的解决方法
- 哈希表
- linux进程间通信(一)--------管道
- 微信前端访问模拟器(flask)
- 文本每行的某列作为参数传递给别的程序
- 大数据量处理经验
- R语言在windows下报错问题
- 在dos下进入mysql
- java 环境搭建
- 实用ExtJS教程100例-008:使用iframe填充ExtJS Window组件
- 关于NSMutableArray removeObject
- shell和perl对文件单词的频数统计
- ASP.NET 使用My97DatePicker日期控件
- 【转】MFC CListCtrl 使用技巧
- 用SQL查询方式显示GROUP BY中的TOP解决方法[转]
- 2013-12-13 学习笔记
- c++进程通信11种方法