Невелика модифікація пропозиції @Krizz, щоб вона працювала належним чином, якщо файл заголовка констант повинен бути включений до PCH, що досить нормально. Оскільки оригінал імпортується в PCH, він не перезавантажить його у .mфайл, і, таким чином, ви не отримаєте жодних символів, і вкладач незадоволений.
Однак наступна модифікація дозволяє йому працювати. Це трохи заплутано, але це працює.
Вам знадобляться 3 файли, .hфайл яких має постійні визначення, .hфайл і .mфайл, я буду використовувати ConstantList.h, Constants.hі Constants.m, відповідно. вміст Constants.hпросто:
// Constants.h
#define STR_CONST(name, value) extern NSString* const name
#include "ConstantList.h"
і Constants.mфайл виглядає так:
// Constants.m
#ifdef STR_CONST
#undef STR_CONST
#endif
#define STR_CONST(name, value) NSString* const name = @ value
#include "ConstantList.h"
Нарешті, у ConstantList.hфайлі є фактичні декларації, і це все:
// ConstantList.h
STR_CONST(kMyConstant, "Value");
…
Декілька речей, які слід зазначити:
Мені довелося повторно визначити макрос у .mфайлі після #undef того, як він буде використаний для макросу.
Я також повинен був використовувати #includeзамість #importцього, щоб правильно працювати і уникати, щоб компілятор не бачив попередньо компільовані значення.
Для цього знадобиться перекомпіляція вашого ПК (і, можливо, всього проекту), коли будь-які значення змінюються, що не відбувається, якщо вони відокремлюються (і дублюються) як звичайні.
Сподіваюся, що комусь це корисно.