由于我经常使用NSInteger数组,我为NSArray编写了一个类别(也是NSMutableArray的一个类别),它添加了诸如integerAtIndex:,arrayByAddingInteger:等方法.这些方法负责在NSNumber对象中包装/解包NSInteger.
我想知道的是,是否有一种方法可以增强我的类别,以便我可以对NSIntegers进行快速枚举.我想能够写:
NSArray* arrayOfIntegers; . . . for(NSInteger nextInteger in arrayOfIntegers) { }
….然后,“nextInteger”被拉出幕后的NSNumber对象.我可以这样做吗?
解决方法
我怀疑使用NSFastEnumeration有一个干净的方法,因为它在很大程度上取决于nextObject方法.
@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
也许你可能想看看Lumumba Framework上的NSArray categories,这恰好是我写的:D