NSPredicate谓词过滤

  • 使用NSPredicate的predicateWithFormat:方法(可以跟不定参数)以一个谓词字符串来创建NSPredicate对象

    • NSPredicate* pred =[NSPredicate predicateWithFormat:@“name like ’s*’”];
  • 是否有占位符参数:

  • 没有: 使用evaluateWithObject:计算谓词结果,返回Bool值 [pred evaluateWithObject:obj ];

  • 只有普通的%@或%K: 需要在predicateWithFormat:方法中为各占位符传参

    • NSString* propertyPath = @“name”; NSString* value = @“Jack”;
    • [NSPredicate predicateWithFormat:@“%K CONTAINS %@”, propertyPath,value];
  • 有形如$SUBSTR的参数: 使用evaluateWithObject: substitutionVariables: 方法为占位符参数设置参数值并计算谓词结果(或者分为两步,使用predicateWithSubstitutionVariables:为占位符参数设置参数值,然后使用evaluateWithObject:计算谓词的返回结果)

    • NSPredicate* pred =[NSPredicate predicateWithFormat:@“name CONTAINS $SUBSTR”];
    • NSPredicate* predSub1 = [pred predicateWithSubstitutionVariables:{@“SUBSTR”:@“david" }];//产生一个新的NSPredicate对象

    如果要在谓词中使用变量,可以使用占位符参数, 同时需要在predicateWithFormat:方法中为各占位符传参

  • %K用于动态传入属性名
  • %@用于动态设置属性值

如果是$SUBSTR的参数,需要再predicateWithSubstitutionVariables:接收一个字典为占位符参数设置参数值

谓词表达式语法:
参考FKiOSP305

你可能感兴趣的:(NSPredicate谓词过滤)