Невелика модифікація пропозиції @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
цього, щоб правильно працювати і уникати, щоб компілятор не бачив попередньо компільовані значення.
Для цього знадобиться перекомпіляція вашого ПК (і, можливо, всього проекту), коли будь-які значення змінюються, що не відбувається, якщо вони відокремлюються (і дублюються) як звичайні.
Сподіваюся, що комусь це корисно.