0

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

4

3 回答 3

2

NSRange使用NSUIntegers 定义。如果你想要类似的东西,你可以使用相同的模式定义你自己的结构:

typedef struct _MYDoubleRange {
      double location;
      double length;
} MYDoubleRange;

但是位置和长度可能不像 s 那样有意义double,您将无法直接将其存储MYDoubleRange在 an 中NSArray。我会定义一个对象:

@interface MYDoubleRange : NSObject
@property(nonatomic,assign) double start;
@property(nonatomic,assign) double end;
@end

然后你可以添加任何你需要比较的方法,等等。

于 2013-10-02T04:12:48.367 回答
1

你有两个问题。第一,你想要一个处理浮点数的范围,第二你想把它放到一个 NSArray 中。

谈到第二个问题,NSArray 不会接受原语。我从来没有测试过是否有解决问题的方法,但通常你只将 NSObject 和 NSObject 子类放入 NSArrays。(有趣的事实:cocoa 和 cocoa touch 中的几乎所有对象实际上都是 NSObject 的子类!它是......好吧,一切的根源!)

您可能需要做的是滚动您自己的自定义 NSObject 子类,该子类封装了您需要的逻辑,然后使用它。

于 2013-10-02T04:27:31.067 回答
0

标准库中没有任何内容允许您使用双打创建范围(NSRange)。当然,您可以创建自己的范围对象。如果您更详细地描述您需要的范围(即代表什么......等等),我很乐意尝试和帮助。

于 2013-10-02T04:07:47.267 回答