Loại âm thanh như bạn đang mong đợi NSRange
giống như một đối tượng Python range
. Nó không phải; NSRange
chỉ đơn giản là cấu trúc
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
không phải là đối tượng. Khi bạn đã tạo, bạn có thể sử dụng các thành viên của nó trong một đồng bằng cũ for
loop:
NSUInteger year;
for(year = years.location; year < NSMaxRange(years); year++){
// Do your thing.
}
(Vẫn làm việc trên giả định rằng bạn đang nghĩ về Python.) Có cú pháp trong ObjC gọi fast enumeration cho iterating trên nội dung của một số NSArray
tương tự như một vòng lặp Python for
, nhưng vì các số nguyên và số nguyên không thể được đưa vào một số NSArray
, bạn không thể truy cập trực tiếp từ một số NSRange
tới mảng Cocoa.
Một loại có thể làm điều đó dễ dàng hơn, mặc dù:
@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;
}
Sau đó, bạn có thể tạo một mảng và sử dụng liệt kê nhanh:
NSArray * years = [NSArray WSSArrayWithNumbersInRange:NSMakeRange(2011, 5)];
for(NSNumber * yearNum in years){
NSUInteger year = [yearNum unsignedIntegerValue];
// and so on...
}
Nguồn
2011-11-30 04:10:29
cảm ơn, quá xấu không có hỗ trợ cho việc liệt kê nhanh NSRange. có thể giúp tôi tiết kiệm thời gian và các dòng mã – aporat
@manroe: Tôi đánh giá cao sự chỉnh sửa lỗi mã hóa của bạn, nhưng khối "EDIT:" lớn không phù hợp; nó có thể là một nhận xét, bản tóm tắt chỉnh sửa, hoặc thực sự chỉ bị loại bỏ hoàn toàn. –