Цель C: Доступ к константам из других классов - PullRequest
2 голосов
/ 29 сентября 2011

У меня есть константа в одном классе, к которой я хочу получить доступ из другого. Я хочу получить доступ к этим:

#define kStateRunning 1
#define kStateGameOver 2
#define kStateMenu 3

которые в моем GameController.h от Level1.m. В Level1.h у меня есть @class GameController, а также импорт в файле реализации.

Я пытался найти ответ, но я не уверен, правильно ли я все это формулирую.

Ответы [ 2 ]

6 голосов
/ 29 сентября 2011

Если вы используете #define myConstant, myConstant будет известно, так как вы импортируете свой файл.Определите их в начале вашего GameController.h между импортом и, например, @Interface.

Затем, если вы импортируете GameController.h в один из ваших других файлов (например, Level1.m).Вы можете использовать его без префикса.Просто используйте myConstant

3 голосов
/ 29 сентября 2011

Я бы не стал использовать #define, поскольку вы теряете какие-либо проверки от компилятора. Обычно вы используете константу, чтобы избежать использования магических значений в коде, которые могут быть написаны неправильно или напечатаны неправильно.

В документации Apple для Рекомендации по кодированию они рассказывают, как вам следует подходить к каждому типу константы.

Для простых целых чисел, которые у вас есть, они предлагают enums - лучший вариант. Они широко используются в платформах Apple, поэтому вы знаете, что они хороши.

Вам все равно нужно определить его в заголовке.

например. (Используйте собственный префикс вместо PS)

typedef enum {
    PSGameStateRunning  = 1,
    PSGameStateGameOver,
    PSGameStateMenu,
} PSGameState;

Это также имеет то преимущество, что является типом, который вы можете передавать / возвращать из функций, если вам требуется

...