2010-08-22 93 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]]; 

應保存所有指定的類的對象。

聲明:未經測試,遺憾如果出現問題:/

相關問題