En cierto modo parece que estás esperando NSRange
a ser como un range
objeto Python. No es; NSRange
es simplemente una estructura
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
no un objeto. Una vez que haya creado uno, puede utilizar sus miembros en una llanura de edad for
bucle:
NSUInteger year;
for(year = years.location; year < NSMaxRange(years); year++){
// Do your thing.
}
(Sigue trabajando en el supuesto de que usted está pensando en Python.) Hay sintaxis en ObjC llama fast enumeration para iterar sobre el contenido de un NSArray
que es gratamente similar a un bucle de Python for
, pero como los números literales y primitivos no se pueden poner en un NSArray
, no se puede pasar directamente de NSRange
a una matriz de Cacao.
Una categoría podría hacer que más fácil, sin embargo:
@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;
}
continuación, puede crear una matriz y utilizar la enumeración rápida:
NSArray * years = [NSArray WSSArrayWithNumbersInRange:NSMakeRange(2011, 5)];
for(NSNumber * yearNum in years){
NSUInteger year = [yearNum unsignedIntegerValue];
// and so on...
}
gracias, lástima que no hay soporte para la enumeración rápida de NSRange. podría ahorrarme algo de tiempo y líneas de código – aporat
@manroe: Agradezco la corrección de mi error de codificación, pero el gran bloque "EDITAR:" fue inapropiado; podría haber sido un comentario, el resumen de edición, o simplemente haber quedado en blanco por completo. –