使用NSPredicate

  1. 使用简单的谓词:
  • NSPredicate *predicate = [NSPredicate predicatedWithFormat:@"name == '张三'"]; BOOL match = [predicate evaluateWithObject:studentModel];
    说明:name为键路径,右侧的字符串需要用单引号括起来,否则会被当作键路径处理。
  • NSPredicate *predicate = [NSPredicate predicatedWithFormat:@"studentModel.grade > 120"]; BOOL match = [predicate evaluateWithObject:classModel];
  1. 数组使用谓词过滤:
    NSPredicate *predicate = [NSPredicate predicatedWithFormat:@"grade > 120"]; NSArray *result = [students filteredArrayUsingPredicate: predicate];
    得到所有成绩大于120分的学生。
  2. 创建灵活的谓词:
  • 使用格式说明符
    NSPredicate *predicate = [NSPredicate predicatedWithFormat:@"%K == %@", @"name", @"张三"]
    说明:使用%K可以格式化键路径
  • 将变量名放入字符串中
    NSPredicate *predicateTemplate = [NSPredicate predicatedWithFormat:@"name == $NAME"]; NSDictionary *dic = @{@"NAME":@"张三"}; predicate = [predicateTemplate predicateWithSubstitutionVariables:dic];
    说明:对于标量,可以使用NSNumber。可以使用[NSNull null]来设置nil值。不过,不能使用$变量名作为键路径。
  1. 可以使用AND、OR、NOT,或者&&、||和!
    NSPredicate *predicate = [NSPredicate predicatedWithFormat:@"(grade > 120) AND (grade < 150)"]
  2. 可以使用BETWEEN和IN表示范围
  • NSPredicate *predicate = [NSPredicate predicateWithFormat:@"grade BETWEEN {120, 150}"]
  • NSArray *between = @[@120, @150]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"grade BETWEEN %@", between]
  • NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name IN {'张三', '李四'}"]
  1. 通过使用SELF作为键路径:
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN {'张三', '李四, '王五''}"] [names filteredArrayUsingPredicate:predicate];
  2. 字符串运算符
  • BEGINSWITH:检查一个字符串是否以另一个字符串开头
  • ENDSWITH:检查一个字符串是否以另一个字符串结尾
  • CONTAINS:检查一个字符串是否包含另一个字符串
  • LIKE:@"name LIKE '*三'"或者@"name LIKE '?三'"
    这四个运算符都可以添加[c]、[d]、[cd]修饰符。[c]表示不区分大小写,[d]表示不区分发音符号。用法如:name LIKE[cd] 'David'

你可能感兴趣的:(使用NSPredicate)