Typedef enum Objective-C

时间:2010-10-08 19:32:36

标签: objective-c enums

我有类Distance和typedef枚举单元,

@interface Distance:NSObject{

double m_miles;

}

@property double m_miles;

-(Distance *) initWithDistance: (double) value andUnit:(Unit) unit;

@implementation Distance

-(Distance *)initWithDistance: (double) value andUnit:(Unit) unit{

  self = [super init];

 if (self){

   switch (unit) {

     case Unit.miles:  m_miles = value;

                       break;

    case Unit.km:      m_miles = value/1.609344;

                       break;
}


}

我在哪里宣布我的枚举单位?如何访问

typedef enum{

    miles;

    km;

}Unit

在其他课程中,我应该可以拨打Distance.Unit.km或里程:

Distance *a = [[Distance alloc] initWithDistance: 10.2 andUnit: Distance.Unit.km];

3 个答案:

答案 0 :(得分:6)

在C中,enum不会使其值“合格”。您必须使用

访问它
Distance *a = [[Distance alloc] initWithDistance: 10.2 andUnit:km];
//                                                             ^^
//                                                             no Distance.Unit.stuff

答案 1 :(得分:2)

看起来你正试图像C ++那样做一个类typedef。我不记得在Objective-C中是否允许这样做,但这不是我在这里怎么做的。我会把课程外面的枚举保留下来。只需使用typedef创建另一个头文件。虽然这是一个微不足道的例子,但是在Distance类之外的枚举可能有其他用途,所以在外面定义它。

另一种可能性,如果你正在使用它,那就是有两个初始值设定项initWithMiles:initWithKilometers:

答案 2 :(得分:1)

Objective-C不会改变C关键字的含义。它被设置为使用消息和对象。您应该在enum之前声明@interface。我建议你跟随JeffW使用initWithMiles:initWithKilometers:,请参阅Cocoa Fundamentals了解如何设计方法。