[OC基础]NSPredicate

NSPredicate,用来指定过滤器条件的对象

  • 创建 NSPredicate 对象
// 直接写好过滤条件
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF.itemName == 'a'"];

// 用格式说明符间接生成条件
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"SELF.%K == %@",@"itemName",@"a"]; // %K 表示键路径

// 用变量间接生成条件
NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:@"SELF.itemName == $NAME"];
NSDictionary *varDic = @{@"NAME":@"a"};
NSPredicate *predicate3 = [predicateTemplate predicateWithSubstitutionVariables:varDic];

// 生成过滤自身的条件
NSArray *characterRange = @[@"a",@"b"];
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"SELF IN %@",characterRange]; // 等同于 SELF IN {'a','b'}
// 比较运算符支持:==,>=,<=,>,<,!=

// 逻辑运算符支持:&&,||,!,AND,OR,NOT

// 数组运算符支持:BETWEEN {xxx,xxx}(表示数值范围),IN {xxx,xxx,...}(表示特定值)

// 字符串运算符支持:BEGINSWITH[c],ENDSWITH[d],CONTAINS[cd]。c 表示忽略大小写,d 表示忽略发音符号,cd 两者皆有

// 正则表达式:SELF.xxx LIKE '*er*',SELF.xxx LIKE '???er*'。* 表示任意字符,? 表示单个字符
  • 使用 NSPredicate 对象进行判断或过滤
// 用 NSPredicate 处理单个对象
NSPredicate *itemNamePredicate = [NSPredicate predicateWithFormat:@"SELF.itemName == 'a'"];
BOOL result = [itemNamePredicate evaluateWithObject:item4];

// 用 NSPredicate 过滤集合
NSArray *itemsArray = @[item1,item2,item3,item4];
NSArray *resultArray = [itemsArray filteredArrayUsingPredicate:itemNamePredicate];

NSMutableArray *itemsMutableArray = [NSMutableArray arrayWithArray:itemsArray];
[itemsMutableArray filterUsingPredicate:itemNamePredicate];

你可能感兴趣的:([OC基础]NSPredicate)