在objective-c中,应该说在COCOA中的NSPredicate表示的就是一种判断。一种条件的构建。我们可以先通过NSPredicate中的predicateWithFormat方法来生成一个NSPredicate对象表示一个条件,然后在别的对象中通过evaluateWithObject方法来进行判断,返回一个布尔值。还是看代码简单明了:
- #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
语法结构有点儿类似之前我们介绍的KVC,灵活多变。
原文地址:http://blog.csdn.net/holydancer/article/details/7380799