由于我经常使用 NSInteger 数组,我为 NSArray 编写了一个类别(也为 NSMutableArray 编写了一个类别),它添加了诸如 integerAtIndex:、arrayByAddingInteger: 等方法。这些方法负责在 NSNumber 对象中包装/解包 NSInteger .
我想知道是否有一种方法可以增强我的类别,以便我可以对 NSIntegers 进行快速枚举。我希望能够写:
NSArray* arrayOfIntegers;
.
.
.
for(NSInteger nextInteger in arrayOfIntegers)
{
}
……这样“nextInteger”就从幕后的 NSNumber 对象中拉出来了。我可以这样做吗?
最佳答案
我怀疑是否有一种干净的方法可以用 NSFastEnumeration 来做到这一点,因为它在很大程度上取决于 nextObject
方法。
但是,你可以用另一种方式来做,通过为它添加一个 block 方法:
@interface NSArray (Integers)
-(void)eachInteger:(void(^)(NSInteger))block;
@end
@implementation NSArray (Integers)
-(void)eachInteger:(void(^)(NSInteger))block {
for (NSNumber *num in self) {
block(num.integerValue);
}
}
@end
这样,您就可以以类似的方式在您的代码中使用它:
NSArray *arr = [NSArray arrayWithObjects:[NSNumber numberWithInt:23],
[NSNumber numberWithInt:42],
nil];
...
[arr eachInteger:^(NSInteger i) {
NSLog(@"The int is %i", i);
}];
// =>
// The int is 23
// The int is 42
也许您可能想看一下 NSArray categories在 Lumumba Framework 上, 这恰好是我写的:D
关于objective-c - NSIntegers 的 NSArray 类别的快速枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902577/