我不知道为什么在NSArray
中不存在类比。仔细阅读文档,不少收集方法都有多态性,但不是这一种。
filteredArrayUsingPredicate:
可能适合大多数问题不够好,但是到了NSSet
签名匹配,它不会是不合理的延长NSArray
这样的:
// NSArray+NotUnreasonableAddition.h
@interface NSArray (NotUnreasonableAddition)
- (NSArray *)objectsPassingTest:(BOOL (^)(id, BOOL *))test;
@end
// NSArray+NotUnreasonableAddition.m
@implementation NSArray (NotUnreasonableAddition)
- (NSArray *)objectsPassingTest:(BOOL (^)(id, BOOL *))test {
NSMutableArray *result = [NSMutableArray new];
for (id obj in self) {
BOOL stop = NO;
if (test(obj, &stop)) [result addObject:obj];
if (stop) break;
}
return result;
}
@danh在关于'filteredArrayUsingPredicate好点:'。 (我删除了他评论的答案,因为我认为他的评论比我的回答好。) –