Разработка под Apple iOS / Упрощаем создание extern констант

в 10:43, , рубрики: const, objective-c, метки: , ,

Известно, что для того что бы создать extern константу (например типа NSString *) необходимо сделать два шага:
— в .h файле объявить константуextern NSString *const kMyConst;
— в .m файле присвоить ей значениеNSString *const kMyConst = @"kMyConst";
То, что приходится два раза писать примерно одно и тоже это нормально, если у вас немного подобных констант.
Когда я столкнулся с необходимостью объявления около 30 констант, я решил придумать что нибудь более красивое. По итогу вышла трех-файловая реализация.Constants.h#define def_key(name) extern NSString *const name
#define def_int(name, value) extern int const name
#define def_type(type, name, value) extern type const name
#include "ConstantsDefs.h"Constants.m#import "Constants.h"
#undef def_key
#define def_key(name) NSString *const name = @#name
#undef def_int
#define def_int(name, value) int const name = value
#undef def_type
#define def_type(type, name, value) type const name = value
#include "ConstantsDefs.h"ConstantsDefs.hdef_key(kStringConstant);
def_int(kIntConstant, 313373);
def_type(float, kFloatConstant, 313373.0f);
Теперь, если мне нужно добавить константу, я делаю это только в одном месте в ConstantsDefs.h, а для ее использования импортирую Constants.h.
Надеюсь, будет кому нибудь полезно!


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js