Может ли перечисление быть определено в том же файле, что и заголовок класса, который использует его в Objective-C?


Если нет, то и он должен быть включен в отдельный файл (например, MyEnums.h) нужно ли мне #импортировать MyEnums.ч каждый раз .м или .файл h хочет ссылаться на тип или одно из значений?


Вот пример кода MyClass.h:

#import <Foundation/Foundation.h>

// #1 placeholder

@interface MyClass : NSObject {
}

// #2 placeholder

- (void)sampleMethod:(MyEnum)useOfEnum;

// #3 placeholder

@end

Вот перечисление, которое я пытаюсь определить:

typedef enum MyEnum {
    Value1,
    Value2
}

Если я попытаюсь поместить свое определение enum в #1, я получуошибку: перед "интерфейсом" здесь не может быть указан тип или класс хранения.

Если я попытаюсь поместить свое определение перечисления в #2, я получаю ошибку: ожидаемый идентификатор или ' ('перед' end ' .

Если я попытаюсь поместить свое определение перечисления в #3, я получу ошибку: ожидаемая ')' перед 'MyEnum'. Который жалуется на параметр "useOfEnum", потому что его тип еще не определен.


Так можно ли это сделать? Или как лучше всего сделать это и ограничить количество #импорта, необходимого?

2 4

2 ответа:

Он должен работать в позиции #1, но я думаю, что вам нужно написать его так:

typedef enum {
    Value1,
    Value2
} MyEnum;

Правильно работать.

Update: я подтвердил это (по крайней мере, в Xcode 3.2). Синтаксис, показанный выше, компилируется без ошибок.

Похоже, что вы просто пропускаете ; в конце объявления перечисления typedef.