我不知道爲什麼在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好點:'。 (我刪除了他評論的答案,因爲我認爲他的評論比我的回答好。) –