typedef enum: какие классы имеют к нему доступ - PullRequest
5 голосов
/ 16 мая 2011

ПРИМЕЧАНИЕ: я изменил имена, на самом деле у меня нет букв типа.

в моем контроллере корневого представления .h, я делаю

typedef enum {
a,
b,
c,
d,
e }letters;

У меня есть несколько других классов, большинство из которых должны использовать этот тип «букв». в моем контроллере корневого представления я использую "#import" MyClass.h "для импорта класса (так как я делаю его экземпляр в rootViewController), однако это не позволяет MyClass использовать тип" letters ".

Я попытался добавить в MyClass.h "#import rootViewController.h", но xcode начал выдавать мне ошибки (только иногда он включался и выключался). Каков наилучший способ сделать это? я должен просто импортировать rootViewController во все классы, которые нуждаются в этом типе "букв"? Можно ли использовать rootViewController для импорта MyClass и MyClass для rootViewController?

Ответы [ 2 ]

11 голосов
/ 16 мая 2011

Если вам нужно использовать enum только для одного класса, включите его в файл .h этого класса.Если вам нужно использовать enum во многих разных местах, вам, вероятно, лучше будет создать файл .h просто для объявления enum и включать его везде, где вам это нужно.

Ваши ошибки, вероятно, происходят отнедостающие предварительные декларации.Если RootViewController имеет подписи, свойства или методы ivars, которые ссылаются на MyClass, то должен быть видимым либо блок @class MyClass;, либо @interface для MyClass, прежде чем компилятор получит эти подписи ivar, properties или method.Если RootViewController.h и MyClass.h оба включают другие, то это будет работать, если RootViewController.h будет импортирован первым, но завершится неудачей, если MyClass.h будет импортирован первым.

0 голосов
/ 16 мая 2011

A typedef enum похоже на #define с небольшим количеством проверки ошибок (ограничено целочисленными типами).

Т.е. единственный способ, которым это может вызвать проблему, - это если вы облажаете синтаксисили объявить что-то с тем же именем (ошибка повторного объявления).

Вне этого вряд ли будет вашей проблемой.

Невозможно сказать больше, не видя сообщений об ошибках.

...