Глобальная собственность в объекте C

У меня есть перечисление, определенное в файле Constants.h следующим образом:

typedef enum { CalendarTypeMonth = 0, CalendarTypeWeek } CalendarType; 

Затем, на мой взгляд, я определяю тип календаря и сохраняю его в свойстве следующим образом:

 @property (nonatomic) CalendarType myCalendarType; 

Теперь я хочу, чтобы все классы в моем проекте имели доступ к типу календаря. Как установить это свойство как global / extern, чтобы все классы могли это прочитать?

EDIT: Я знаю, что определение перечисления будет доступно по всему проекту. Но меня интересует ценность myCalendarType . Как я могу получить доступ к значению myCalendarType для всех классов?

Вы можете объявить метод класса для доступа к статической переменной.

Добавьте такой код в файл реализации:

 static MyStaticType staticVar = MyStaticTypeDefault; +(BOOL)myStaticVar { return staticVar; } +(void)setMyStaticVar:(MyStaticType)newValue { staticVar = newValue; } 

И создайте объявления для этих методов в файле интерфейса. Это намного лучше, чем перемещение всех статических значений в AppDelegate. Во всяком случае, возможно много вариантов – например, вы можете создать singleletone для хранения некоторых настроек приложения или использовать CoreData.

В файле [Project Name] _Prefix.pch вы можете добавить это заявление:

 #import "Constants.h" 

Таким образом, вы сделаете свой enum доступным для каждого файла в проекте.

EDIT: Чтобы получить доступ к значению, я предлагаю сделать его глобальным свойством вашего делегата приложения. Чтобы сделать это еще дальше, вы можете заставить ваше приложение делегировать метод NSObject с помощью категории, чтобы он мог выглядеть примерно так:

 CalendarType current = [self appDelegate].currentCalendarType 

Обратите внимание, что ваше свойство теперь является общедоступным / устанавливаемым объектом.