谓词大揭秘

谓词由NSPredicate对象来代表,它有三个子类:NSComarisonPredicate,NSCompoundPredicate和NSExpression,虽然程序实际创建的通常是NSPredicate的子类的实例,但实际编程时会直接使用NSPredicate的predicateWithFormat:方法,以一个谓词字符串为参数来创建NSPredicate对象。例子如下:

group.name like "work"
ALL children.age > 12
ANY children.age > 12

创建谓词之后,如果谓词中没有占位符参数,即可使用NSPredicate的evaluteWithObject:方法计算谓词的结果,该结果总是一个BOOL值;如果该谓词中有占位符参数,则需要经过如下两步来计算谓词的结果。
1,调用谓词的predicateWithSubstitutionVariables:方法为占位符参数设置参数值。
2,执行谓词的evaluateWithObject:方法计算谓词的返回结果。
提示:
NSPredicate 还提供了一个evaluteWithObject:substitutionVariables:方法,该方法可以同时完成上面两步。该方法既为谓词重点占位符参数设置了参数值,也计算了谓词的返回结果。

在谓词中使用占位符参数
如果需要在谓词表达式中使用变量,则可以考虑在谓词表达式中使用占位符参数,谓词表达式中支持以下两个占位符参数。
1)%K:该占位符用于动态传入属性名。
2)%@:该占位符用于动态设置属性值。
如果在此表达式中使用了占位符参数,则需要在调用predicateWthFormatL方法时为个占位符传入参数值。
除此之外,还可以在谓词表达式中使用动态改变的属性值,类似于环境变量,如下:

[NSPredicate predicateWithFormat:@"name CONTAINS $SUBSTR"];

上面表达式$SUBSTR是一个可以动态变化的值,随着程序改变了$SUBSTR 的值,该谓词表达式的比较条件就可以动态的改变。
谓词表达式语法
谓词大揭秘_第1张图片
谓词大揭秘_第2张图片
谓词大揭秘_第3张图片

你可能感兴趣的:(Object-C)