Звучит так, будто вы ожидаете, что NSRange
будет похож на объект Python range
. Это не; NSRange
это просто структура
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
не объект. Создав его, вы можете использовать его члены в простом старом цикле for
:
NSUInteger year;
for(year = years.location; year < NSMaxRange(years); year++ ){
// Do your thing.
}
(Продолжая работать в предположении, что вы думаете о Python.) В ObjC есть синтаксис, называемый fast enumeration для перебора содержимого NSArray
, который приятно похож на Python for
цикл, но поскольку буквенные и примитивные числа не могут быть помещены в NSArray
, вы не можете напрямую перейти от NSRange
к массиву Какао.
Категория может сделать это проще, хотя:
@implementation NSArray (WSSRangeArray)
+ (id)WSSArrayWithNumbersInRange:(NSRange)range
{
NSMutableArray * arr = [NSMutableArray array];
NSUInteger i;
for( i = range.location; i < NSMaxRange(range); i++ ){
[arr addObject:[NSNumber numberWithUnsignedInteger:i]];
}
return arr;
}
Затем вы можете создать массив и использовать быстрое перечисление:
NSArray * years = [NSArray WSSArrayWithNumbersInRange:NSMakeRange(2011, 5)];
for( NSNumber * yearNum in years ){
NSUInteger year = [yearNum unsignedIntegerValue];
// and so on...
}