我知道我能做到
for (id obj in array)
{
if ([obj isKindOfClass:[Elephant class]])
[elephants addObject:obj];
}
但我觉得必须有更优雅的方式来做到这一点。我看过过滤数组,但无法提出一个好的谓词。想法?
答案 0 :(得分:3)
谓词类似于
Class ec = [Elephant class];
NSPredicate *elePred = [NSPredicate predicateWithFormat:@"class==%@", ec];
NSArray *elephants = [array filteredArrayUsingPredicate:elePred];
或
NSPredicate *elePred = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", ec];
我发现谓词是相当的,呃..我们应该说“重”。我可能更喜欢你的代码。
如果您只是想让自己的生活变得更有趣,可以使用块来增加一点并发......
NSMutableArray *results = [NSMutableArray array];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
if([obj isKindOfClass:[Elephant class]])
[results addObject:obj];
}];
答案 1 :(得分:0)
您可以创建NSMutableArray
类别并添加下一个方法:
- (void)addObject:(id)anObject ifItIsKindOfClass:(Class) classObj {
if ([anObject isKindOfClass:classObj]) {
[self addObject:anObject];
}
}
简单写一下:
for (id obj in array)
{
[elephants addObject:obj ifItIsKindOfClass:[Elephant class]];
}
还有一个加号:可重复使用。