无论如何在Objective-C中有一系列双重对象

时间:2013-10-02 04:03:27

标签: ios objective-c nsarray nsdictionary

我有一个普遍的问题。有没有办法在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不会创建对象。

3 个答案:

答案 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)。但是你当然可以创建自己的范围对象。如果你对你需要的范围(即它代表什么等等)有一点描述性的话,我很乐意尝试和帮助。