To niby brzmi jak czekasz NSRange
być jak Python range
obiektu. To nie jest; NSRange
jest po prostu strukturą, a nie obiektem. Po utworzeniu jednego, można użyć jej członków w zwykły stary for
pętli:
NSUInteger year;
for(year = years.location; year < NSMaxRange(years); year++){
// Do your thing.
}
(Nadal działa na założeniu, że myślisz o Pythonie.) Jest składni w ObjC nazywa fast enumeration dla iteracji nad zawartość NSArray
, która jest przyjemnie podobna do pętli Python for
, ale ponieważ liczby literalne i pierwotne nie mogą być wstawione do NSArray
, nie można przejść bezpośrednio z tablicy NSRange
do tablicy kakao.
A Kategoria mógłby zrobić to łatwiej, choć:
@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;
}
Następnie można utworzyć tablicę i wykorzystywać szybki liczby:
NSArray * years = [NSArray WSSArrayWithNumbersInRange:NSMakeRange(2011, 5)];
for(NSNumber * yearNum in years){
NSUInteger year = [yearNum unsignedIntegerValue];
// and so on...
}
dzięki, szkoda, że nie ma wsparcia dla szybkiego wyliczenia dla NSRange. może zaoszczędzić mi trochę czasu i linii kodu – aporat
@manroe: Doceniam twoją korektę mojego błędu kodowania, ale duży blok "EDIT:" był niewłaściwy; mógł to być komentarz, podsumowanie edycji lub w ogóle pominięty. –