我的第一本能是如何在NSArray中查找某種類型的對象?
FooType *myFoo = nil;
for (id obj in myArray) {
if ([obj isKindOfClass:[FooType class]]) myFoo = obj;
}
隨着Objective-C和的NSArray所有的好東西,有一定有一個更好的辦法,對不對?
我的第一本能是如何在NSArray中查找某種類型的對象?
FooType *myFoo = nil;
for (id obj in myArray) {
if ([obj isKindOfClass:[FooType class]]) myFoo = obj;
}
隨着Objective-C和的NSArray所有的好東西,有一定有一個更好的辦法,對不對?
積木支持(的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
方法。
沒有。這就是你如何去做的。雖然可能有版本在新的iOS4 API中接受一個塊,可能會使它更簡單一些。
就像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]];
應保存所有指定的類的對象。
聲明:未經測試,遺憾如果出現問題:/