【问题标题】:Typedef enum Objective-CTypedef 枚举 Objective-C
【发布时间】:2010-10-08 19:32:35
【问题描述】:

我有类 Distance 和 typedef enum Unit,

@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];

【问题讨论】:

    标签: objective-c enums


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      看起来你正在尝试像 C++ 中那样做一个类 typedef。我不记得在 Objective-C 中是否允许这样做,但无论如何我不会在这里这样做。我会将枚举保留在课堂之外。只需使用 typedef 创建另一个头文件。尽管这是一个微不足道的示例,但该枚举在 Distance 类之外可能还有其他用途,因此请在外部定义它。

      另一种可能性,如果这就是您使用它的全部目的,那就是拥有两个初始化器 initWithMiles:initWithKilometers:

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多