我的第一本能是如何在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]];
应保存所有指定的类的对象。
声明:未经测试,遗憾如果出现问题:/