apo*_*rat 6 cocoa cocoa-touch objective-c nsrange
我试图用它NSRange
来保持一定年限,例如
NSRange years = NSMakeRange(2011, 5);
Run Code Online (Sandbox Code Playgroud)
我知道NSRange
主要用于过滤,但我想循环遍历范围内的元素.这可能没有转换NSRange
为NSArray
?
听起来你有点NSRange
像Python range
对象.不是; NSRange
只是一个结构
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
Run Code Online (Sandbox Code Playgroud)
不是一个对象.一旦创建了一个,就可以在一个普通的for
循环中使用它的成员:
NSUInteger year;
for(year = years.location; year < NSMaxRange(years); year++ ){
// Do your thing.
}
Run Code Online (Sandbox Code Playgroud)
(仍在假设您正在考虑使用Python.)ObjC中的语法称为快速枚举,用于迭代NSArray
与Python for
循环非常相似的内容,但由于文字和原始数字不能被放入一个NSArray
,你不能直接从NSRange
一个Cocoa数组.
但是,类别可以使这更容易:
@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;
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以创建一个数组并使用快速枚举:
NSArray * years = [NSArray WSSArrayWithNumbersInRange:NSMakeRange(2011, 5)];
for( NSNumber * yearNum in years ){
NSUInteger year = [yearNum unsignedIntegerValue];
// and so on...
}
Run Code Online (Sandbox Code Playgroud)
请记住,NSRange是一个包含两个整数的结构,表示范围的起点和长度.您可以使用for循环轻松遍历所有包含的整数.
NSRange years = NSMakeRange(2011, 5);
NSUInteger year;
for(year = years.location; year < years.location + years.length; ++year) {
// Use the year variable here
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6929 次 |
最近记录: |