NSPredicate是用来对数组和字典进行筛选的工具,NSPredicate支持采用正则表达式的方式生成条件筛选语句。但是如果我们对正则表达式不熟悉,或者筛选条件比较复杂,可以使用NSPredicate类里提供的采用block方式生成筛选条件的API来生成NSPredicate对象。
+ (NSPredicate*)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block NS_AVAILABLE(10_6, 4_0);
下面有个具体的例子,是我在项目中使用的,因为涉及到双循环,所以我认为block方式的NSPredicate更直观一些:
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(BigOrder * bigOrder, NSDictionary *bindings) {
for (SmallOrder *smallOrder in bigOrder.small_order_list) {
for (OrderProduct *orderProduct in smallOrder.product_list) {
NSRange range = [orderProduct.product_name rangeOfString:searchString];
return range.location != NSNotFound;
}
}
return NO;
}];