我有一个普遍的问题。有没有办法在Objective-C中拥有一系列双重对象?我正在尝试创建一个不同的双范围作为值的字典。
我有以下几个键:
NSArray *keys = @[@"Severe Thinness",@"Moderate Thinness",@"Mild Thinness",
@"Normal Range",@"Overweight",@"Obese Class I (Moderate)",
@"Obese Class II (Severe)",@"Obese Class III (Very Severe)"];
为了创建范围对象,我试图创建这样的数组:
NSArray *values = @[NSMakeRange(1,3),
NSMakeRange(16, 16.99),
NSMakeRange(17, 18.49),
NSMakeRange(18.50, 24.99),
NSMakeRange(25, 29.99),
NSMakeRange(30, 34.99),
NSMakeRange(35, 39.99),
NSMakeRange(40, 100)];
但是这种方法会导致错误,因为NSMakeRange
不会创建对象。
答案 0 :(得分:2)
NSRange
是使用NSUInteger
定义的。如果你想要类似的东西,你可以使用相同的模式定义自己的结构:
typedef struct _MYDoubleRange {
double location;
double length;
} MYDoubleRange;
但是,double
的位置和长度可能没有意义,您将无法直接将MYDoubleRange
存储在NSArray
中。我会定义一个对象:
@interface MYDoubleRange : NSObject
@property(nonatomic,assign) double start;
@property(nonatomic,assign) double end;
@end
然后你可以添加你需要比较的任何方法等。
答案 1 :(得分:1)
你有两个问题。一,你想要一个处理浮动的范围,第二个你想把它放到NSArray中。
触及第二个问题,NSArray不接受原语。我从来没有测试过是否有解决这个问题的方法,但一般来说你只将NSObject和NSObject子类放入NSArrays中。 (有趣的事实:几乎所有可可和可可触摸的对象实际上都是NSObject的子类!它是......好吧,一切的根源!)
您可能需要做的是推送自己的自定义NSObject子类,它封装了您需要的逻辑,然后使用它。
答案 2 :(得分:0)
标准库中没有任何内容允许您创建带双精度的范围(NSRange)。但是你当然可以创建自己的范围对象。如果你对你需要的范围(即它代表什么等等)有一点描述性的话,我很乐意尝试和帮助。