2013-07-18 3 views
0

Я пытаюсь создать переменные, которые могут быть доступны из любого класса, поступающего из фона Java я изо всех сил, чтобы понять это в Objective-C ..класса глобальные переменные в Objective-C

в Java есть :

public static int MAIN_MENU = 1, SELECTION_SCREEN = 2; 

Они могут быть доступны в любом месте, как так:

ClassName.MAIN_MENU; 

Как бы добиться того же в своей простейшей форме для Objective-C, сохраняя его в классе?

+0

В языках, основанных на C (C, C++, ObjC), вы обычно использовать перечисление, а не кучу глобальных переменных. – cHao

+1

Кстати, глобальных переменных в Java нет. В классах есть * статические атрибуты. – Sulthan

+0

@Sulthan: Не озирайтесь; 'static' - это то, как Java называет« глобальным ». 'com.whatever.MyClass.FOO' всегда семантически относится к одному и тому же названию хранилища, где бы он ни был виден ... и если он является общедоступным, он отображается везде. Это в значительной степени само определение глобальной переменной. – cHao

ответ

3

В Objective-C классы не имеют статических элементов. Лучшее, что я могу себе представить, создает геттер и сеттер метод класса с совершенно безобразной глобальной переменной:

static T _member = initialValue; 

+ (T)someStaticMember 
{ 
    return _member; 
} 

+ (void)setSomeStaticMember:(T)newVal 
{ 
    _member = newVal; 
} 

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


НО: если вам нужно только целые константы, то почему бы не использовать enum? Или, по крайней мере, некоторые макросы?

+0

Это был один из худших языков, с которыми нам пришлось иметь дело до сих пор. –

+3

@OllyDixon Вы имеете в виду Objective-C? У него наверняка есть время, чтобы привыкнуть к нему. Но на самом деле, вызывая на языке плохо, потому что вы не знаете, как реализовать перечисления ... это немного преувеличение. –

+0

Но просто кажется, что так много бессмысленных шагов ко всему. –

0

Если ваша цель использует статическую переменную только внутри собственного класса, вы можете объявить свою переменную в файле .m, иначе вы должны определить глобальную константу, используя #define.

#define CONSTANT [ any value ]

+0

Можете ли вы привести пример того, как я буду использовать #define? –

+0

@OllyDixon Пожалуйста, перейдите к «макросам препроцессора C». Если вы их не знаете, вы должны учиться C, а не прыгать прямо в Objective-C. –

+0

У меня нет на это времени, уже начали создавать экраны меню с помощью OpenGL :-P –

0
  1. Вы должны использовать #define MAIN_MENU 1 в заголовочном файле.
  2. Вы должны использовать NSInteger const MAIN_MENU = 1; в m-файле и extern NSInteger const MAIN_MENU; в h-файле.

И #import этот заголовок-файл класса, который вы хотите использовать MAIN_MENU

Смежные вопросы