Мне кажется, что вы пришли из языка Java-стиля, как и я (извините, если я угадаю здесь). Некоторое время я тоже размышлял об этом, а потом заметил, как Apple определяет перечисления и использует их для определения констант, которые вы описываете.
Давайте используем воображаемый класс Event
в качестве примера:
В заголовочном файле вы хотите определить новое перечисление:
typedef enum {
kEventType_EventName1,
kEventType_EventName2,
kEventType_EventName3
}EventType; //this is the name of the new type
, где EventName1
и т. Д., Заменяется фактическими именами нужных вам событий (т. Е. kEventType_Direct
.
Любой другой класс, который должен видеть эти типы событий, просто должен импортировать ваш файл Event.h:
#import "Event.h"
Тогда вы можете использовать EventType
, как если бы вы использовали любой другой тип переменной (учитывая, что он не является объектом NSO, и его нельзя сохранить, освободить и т. Д. - вы бы рассматривали его как любой другой тип C: int, и т. д.)
Вы можете даже иметь типизированные переменные EventType в качестве членов других классов, если эти классы импортируют ваш заголовок Event.h.
Но это позволяет вам делать такие вещи:
-(void) handleEventOfType: (EventType) evtType {
switch(evtType) {
case kEventType_EventType1 :
//stuff here
break;
//etc...
}
}
Это лучший способ, который я видел до сих пор, и, похоже, это тот путь, который обычно практикуется за рубежом (по крайней мере, в большинстве проектов, которые я видел). В любом случае, надеюсь, это поможет!