使用NSPredicate

作者: 黄龙辉 | 来源:发表于2015-09-13 23:55 被阅读567次
    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

        本文链接:https://www.haomeiwen.com/subject/pwzpcttx.html