如何将NSRange存储在NSMutableArray或其他容器中?

Ste*_*her 58 iphone cocoa cocoa-touch nsobject nsrange

这就是我想要做的事情:

NSRange r = NSMakeRange(0,5);
id a = [NSMutableArray a];
[a addObject: r]; // but NSRange is not a NSObject *
Run Code Online (Sandbox Code Playgroud)

使用布尔值,我会使用这样的代码:

[a addObject: [NSNumber numberWithBool: YES]];
Run Code Online (Sandbox Code Playgroud)

或者用整数:

[a addObject: [NSNumber numberWithInteger: 3]];
Run Code Online (Sandbox Code Playgroud)

那么什么是等同于NSRange?我真的不想做的是创建我自己的子类NSObject来完成这个.当然苹果已经提供了一种方式吗?

ken*_*ytm 137

使用NSValue+valueWithRange:.要返回范围结构,请使用该属性rangeValue.

[a addObject:[NSValue valueWithRange:r]];
...

NSRange r = a[4].rangeValue;
Run Code Online (Sandbox Code Playgroud)

  • 因为`NSArray`只能存储对象.`NSRange`不是一个对象,但你可以用`NSValue`包装它,所以它可以被`NSArray`,`NSDictionary`等使用. (3认同)
  • 为什么NSValue可以存储NSRange,但NSArray不能? (2认同)

mip*_*adi 12

[NSValue valueWithRange:r];
Run Code Online (Sandbox Code Playgroud)

并通过以下方式恢复原状:

NSRange r = [rangeObject rangeValue];
Run Code Online (Sandbox Code Playgroud)


Jam*_*ton 5

如果您需要将其存储NSRange在属性列表中,您还可以将其NSRange转换为NSString使用该NSStringFromRange功能.然后,您可以使用该NSRangeFromString函数将该字符串转换回范围.