Typedef enum Objective-C - PullRequest
       7

Typedef enum Objective-C

2 голосов
/ 08 октября 2010

У меня есть класс 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;
}


}

Где я могу объявить мой enum Unit?Как получить доступ

typedef enum{

    miles;

    km;

}Unit

В другом классе я должен иметь возможность звонить Distance.Unit.km или миль:

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

Ответы [ 3 ]

6 голосов
/ 08 октября 2010

В C enum не делает свои значения «квалифицированными».Вы должны получить к нему доступ

Distance *a = [[Distance alloc] initWithDistance: 10.2 andUnit:km];
//                                                             ^^
//                                                             no Distance.Unit.stuff
2 голосов
/ 08 октября 2010

Похоже, вы пытаетесь сделать класс typedef, как вы можете, скажем, в C ++.Я не помню, допускается ли это даже в Objective-C, но это не то, как бы я это сделал здесь в любом случае.Я бы держал enum вне класса.Просто создайте еще один заголовочный файл с помощью typedef.Хотя это своего рода тривиальный пример, могут быть другие применения для этого перечисления вне класса Distance, поэтому определите его снаружи.

Другая возможность, если это все, для чего вы ее используете, это иметь два инициализатора initWithMiles: и initWithKilometers:.

1 голос
/ 09 октября 2010

Objective-C не меняет смысла ключевых слов C. Он настроен на использование сообщений и объектов. Вы должны объявить enum до @interface. Я предлагаю вам использовать JeffW initWithMiles: и initWithKilometers:, см. Основы Какао для того, как разработать методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...