由于我经常使用NSInteger数组,我为NSArray编写了一个类别(也是NSMutableArray的一个类别),它添加了诸如integerAtIndex:,arrayByAddingInteger:等方法.这些方法负责在NSNumber对象中包装/解包NSInteger.
我想知道的是,是否有一种方法可以增强我的类别,以便我可以对NSIntegers进行快速枚举.我想能够写:
NSArray* arrayOfIntegers;
.
.
.
for(NSInteger nextInteger in arrayOfIntegers)
{
}
Run Code Online (Sandbox Code Playgroud)
....然后,"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
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
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |