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