2010-08-22 31 views

回答

10

积木支持(的iOS 4或雪豹):

FooType *myFoo = nil; 
NSUInteger index = [myArray indexOfObjectPassingTest:^BOOL (id obj, NSUInteger idx, BOOL *stop) { 
    return [obj isKindOfClass:[FooType class]]; 
}]; 
if (index != NSNotFound) myFoo = [myArray objectAtIndex:index]; 

这不是真的任何短。您可以考虑编写自己的NSArray方法。

0

没有。这就是你如何去做的。虽然可能有版本在新的iOS4 API中接受一个块,可能会使它更简单一些。

3

就像jtbandes提到的那样,如果你要这么做,你可以写一个NSArray方法作为一个类别。事情是这样的:

@interface NSArray (FindClass) 
- (NSMutableArray *) findObjectsOfClass:(Class)theClass 
@end 

然后

@implementation NSArray (FindClass) 
- (NSMutableArray *) findObjectsOfClass:(Class)theClass { 
    NSMutableArray *results = [[NSMutableArray alloc] init]; 

    for (id obj in self) { 
     if ([obj isKindOfClass:theClass]) 
      [results addObject:obj]; 
    } 

    return [results autorelease]; 
} 
@end 

那么当你要使用它只是做:

NSMutableArray *objects = [myArray findObjectsOfClass:[FooType class]]; 

应保存所有指定的类的对象。

声明:未经测试,遗憾如果出现问题:/

相关问题