NSIntegers的NSArray类别的快速枚举

Jay*_*sky 7 objective-c ios

由于我经常使用NSInteger数组,我为NSArray编写了一个类别(也是NSMutableArray的一个类别),它添加了诸如integerAtIndex:,arrayByAddingInteger:等方法.这些方法负责在NSNumber对象中包装/解包NSInteger.

我想知道的是,是否有一种方法可以增强我的类别,以便我可以对NSIntegers进行快速枚举.我想能够写:

NSArray* arrayOfIntegers;
    .
    .
    .

for(NSInteger nextInteger in arrayOfIntegers)
    {
    }
Run Code Online (Sandbox Code Playgroud)

....然后,"nextInteger"被拉出幕后的NSNumber对象.我可以这样做吗?

Tha*_*bas 4

我怀疑 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
Run Code Online (Sandbox Code Playgroud)

这样,您就可以在代码中以类似的方式使用它:

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
Run Code Online (Sandbox Code Playgroud)

也许你可能想看看Lumumba Framework上的NSArray 类别,它恰好是我写的:D