Cocoa提供了一个类nspredicate类,该类主要用于指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。谓词表示计算真值或假值的函数。
nspredicate *predicate;
predicate=[nspredicatepredicateWithFormat:@"name=='HerbIE'"];//用predicateWithFormat创建一个谓词,name作为键路径
BOol match=[predicateevaluateWithObject:car];//car作为接收对象,evaluateWithObject返回一个bool值。
NSLog(@"%s",(match)?"YES":"NO");
predicate = [:@"engine.horsepower > 150"];
NSArray *cars = [garage cars];
for (Car *car in [garage cars]) {
if ([predicate evaluateWithObject: car]) {
NSLog (@"%@",car.name);
}
}
遍历cars判断是否是真,然后输出。NSArray *results;
results = [carsfilteredArrayUsingPredicate: predicate];//它将循环过滤数组内容,根据谓词计算每个对象的值,并将值为YES的对象累计到将被返回的新数组中。
filteredArrayUsingPredicate这个方法可以得到我们所需要的值。加上
NSArray *names;
names=[results valueForKey:@"name"];
就和上面的值一样。
NSMutableArray *carscopy = [carsmutablecopy];
[carscopyfilterUsingPredicate: predicate];//filterUsingPredicate和NSMutableArray构成新数组。
predicate = [:@"engine.horsepower > %d", 50 results = [cars filteredArrayUsingPredicate: predicate];
nspredicate *predicateTemplate;
NSDictionary *varDict;
predicateTemplate = [nspredicatepredicateWithFormat: @"engine.horsepower > $POWER"];//创建一个键/值字典来存储,这里$符号用于变量
varDict = [NSDictionarydictionaryWithObjectsAndKeys:
[NSNumbernumberWithInt: 150],@"POWER", nil];//@后面参数名
predicate = [predicateTemplatepredicateWithSubstitutionVariables: varDict];
predicateWithFormat:
@"(engine.horsepower > 50) AND (engine.horsepower < 200)"];可以运用运算符
@"oop %@",43); margin-top:0px; margin-bottom:0px; Font-size:11px; line-height:normal; Font-family:Menlo"> predicate = [predicateWithFormat:
@"engine.horsepower BETWEEN { 50,200 }"这里可以运用between关键字。和上面效果一样
NSArray *betweens = [NSArray arrayWithObjects:
[50],[200],nil];
@"engine.horsepower BETWEEN %@",betweens];
predicateTemplate = [:@"engine.horsepower BETWEEN $POWERS" varDict = [NSDictionarydictionaryWithObjectsAndKeys: betweens, @"POWERS",164)">predicateWithSubstitutionVariables: varDict];用变量
@"name < 'Newton'"];//不等号不仅可以用于数字,也可以用于字符串值。
valueForKey: @"name"]);
:@"name IN { 'HerbIE','Snugs','Badger','Flap' }"包含在其中用IN
:@"SELF.name IN { 'HerbIE',58)">//self关键字
names = [cars @"name"];
:@"SELF IN { 'HerbIE',43); margin-top:0px; margin-bottom:0px; Font-size:11px; line-height:normal; Font-family:Menlo"> results = [names@"name BEGINSWITH 'Bad'"];//字符串运算符BEGINSWITH,ENDSWITH,CONTAINS[c][d][cd]
BEGINSWITH:检查某个字符串是否以另一个字符串开头。
ENDSWITH:检查某个字符串是否以另一个字符串结尾。
CONTAINS:检查某个字符串是否以另一个字符串内部。
[c]不区分大小写[d]不区分发音符号即没有重音符号[cd]既不区分大小写,又不区分发音符号。
:@"name liKE[cd] '*er*'"//*代表通配符like还接受[cd].
:@"name liKE[cd] '???er*'"//?只匹配一个字符并且还可以接受[cd].
还可以使用MATCHES运算符。赋给该运算符一个正则表达式。
总结以上是内存溢出为你收集整理的Object-c学习笔记十八-----NSPredicate全部内容,希望文章能够帮你解决Object-c学习笔记十八-----NSPredicate所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)