Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fast Enumeration on an NSArray category for NSIntegers

Tags:

Since I use NSInteger arrays frequently, I wrote a category for NSArray (and one for NSMutableArray too) that adds methods such as integerAtIndex:, arrayByAddingInteger:, etc. The methods take care of wrapping/unwrapping the NSInteger in an NSNumber object.

What I'm wondering is whether there is a way I can enhance my category so that I can do fast enumeration on the NSIntegers. I would like to be able to write:

NSArray* arrayOfIntegers;
    .
    .
    .

for(NSInteger nextInteger in arrayOfIntegers)
    {
    }

….so that "nextInteger" is pulled out of the NSNumber object behind the scenes. Can I do this?

like image 504
Jay Slupesky Avatar asked Jun 05 '12 18:06

Jay Slupesky


1 Answers

I doubt that there is a clean way of doing this with NSFastEnumeration, as it heavily depends on the nextObject method.

But, you could do it in another way, by adding a block method for it:

@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

That way, you could use it in your code in a similar way:

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

Perhaps you might want to take a look at the NSArray categories on the Lumumba Framework, which happens to be written by me :D

like image 196
Tharabas Avatar answered Sep 21 '22 11:09

Tharabas