objective-c - NSIntegers 的 NSArray 类别的快速枚举

标签 objective-c ios

由于我经常使用 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 categoriesLumumba Framework 上, 这恰好是我写的:D

关于objective-c - NSIntegers 的 NSArray 类别的快速枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902577/

相关文章:

ios - Xcode 中 iOS 的标准图像按钮图标

ios - XLForm - 如何左对齐单元格?

ios - 根据 iPhone 收件箱中的文本执行某些操作

ios - 如何去除iOS中mapbox的蓝色和灰色注释

objective-c - 销毁 GMSMapView 时,Google Maps iOS SDK 偶尔会崩溃

ios - 基于字典键的数组排序 :value in swift

ios - 苹果M1。 React-native 无法为 iOS 模拟器构建

ios - 动态添加对象到 UITableView 单元格

ios - Swift 2.2 和 2.3 互操作性

iOS NSManagedObjectContext - 保存所有更改后是否可以获取或发送通知?