在语言上,谓语,谓词是用来判断的,比如“我是程序猿”中的是,就是表判断的谓语,“是”就是一个谓词,在objective-c中,应该说在COCOA中的nspredicate表示的就是一种判断。一种条件的构建。我们可以先通过nspredicate中的predicateWithFormat方法来生成一个nspredicate对象表示一个条件,然后在别的对象中通过evaluateWithObject方法来进行判断,返回一个布尔值。还是看代码简单明了:
- #import<Foundation/Foundation.h>
- @interfaceHuman:NSObject
- {
- Nsstring*name;
- intage;
- Human*child;
- }
- @property(copy)Nsstring*name;
- @propertyintage;
- @end
- @implementationHuman
- @synthesizename;
- @synthesizeage;
- intmain(intargc,constchar*argv[])
- @autoreleasepool{
- //利用kvc进行对象初始化
- Human*human=[[Humanalloc]init];
- Human*child=[[Humanalloc]init];
- [humansetValue:@"holydancer"forKey:@"name"];
- [humansetValue:[NSNumbernumberWithInt:20]forKey:@"age"];
- [humansetValue:childforKey:@"child"];
- [humansetValue:[NSNumbernumberWithInt:5]forKeyPath:@"child.age"];
- nspredicate*predicate1=[nspredicatepredicateWithFormat:@"name=='holydancer'"];//创建谓词判断属性
- nspredicate*predicate2=[nspredicatepredicateWithFormat:@"child.age==5"];//创建谓词判断属性的属性
- //此处在创建谓词时可以有好多种条件写法,比如大小比较,范围验证,甚至像数据库操作那样的like运算符,这里就不一一列举了
- BOOLtmp1=[predicate1evaluateWithObject:human];//验证谓词是否成立,得到布尔返回值
- BOOLtmp2=[predicate2evaluateWithObject:human];
- if(tmp1){
- NSLog(@"human对象的name属性为'holydancer'");
- if(tmp2){
- NSLog(@"human对象的child属性的age为5");
- return0;
- }
判断Array中是否包含某一规则的对象,并返回一个数组:
nspredicate *filterPredicate = [nspredicate predicateWithFormat:@"SELF CONTAINS %@",regex];
并调用:- (NSArray *)filteredArrayUsingPredicate:(nspredicate *)predicate; 方法即可。
获得一个数组中某些对象除外的数组:
nspredicate *notPredicate = [nspredicate predicateWithFormat:@"NOT (SELF in %@)",arrayFilter2];且还是要调用- (NSArray *)filteredArrayUsingPredicate:(nspredicate *)predicate; 方法。
同样,如果我们想找出某个范围内的对象,创建如下Predicate (这里可以用到所有的比较操作符): nspredicate *pre = [nspredicate predicateWithFormat:@"self.*** < 5"];
并调用:- (BOOL)evaluateWithObject:(id)object;方法。
在这里啰嗦一句,如果只是在数组中查找是否存在对象时用indexOfObject,如果不存在则返回为NSNotFound.
字符串替换:
NSError*error=NULL;
NSRegularExpression*regex=[NSRegularExpressionregularExpressionWithPattern:@"(encoding=\")[^\"]+(\")"
options:0
error:&error];
Nsstring*sample=@"<xmlencoding=\"abc\"></xml><xmlencoding=\"def\"></xml><xmlencoding=\"ttt\"></xml>";
NSLog(@"Start:%@",sample);
Nsstring*result=[regexstringByReplacingMatchesInString:sample
range:NSMakeRange(0,sample.length)
withTemplate:@"$1utf-8$2"];
NSLog(@"Result:%@",result);
截取字符串如下:
//组装一个字符串,需要把里面的网址解析出来