Une légère modification de la suggestion de @Krizz, pour qu'elle fonctionne correctement si le fichier d'en-tête des constantes doit être inclus dans le PCH, ce qui est plutôt normal. Étant donné que l'original est importé dans le PCH, il ne le rechargera pas dans le .m
fichier et donc vous n'obtiendrez aucun symbole et l'éditeur de liens est mécontent.
Cependant, la modification suivante lui permet de fonctionner. C'est un peu compliqué, mais ça marche.
Vous aurez besoin de 3 fichiers, .h
fichier qui a les définitions constantes, le .h
fichier et le .m
fichier, je vais utiliser ConstantList.h
, Constants.h
et Constants.m
, respectivement. le contenu de Constants.h
est simplement:
// Constants.h
#define STR_CONST(name, value) extern NSString* const name
#include "ConstantList.h"
et le Constants.m
fichier ressemble à:
// Constants.m
#ifdef STR_CONST
#undef STR_CONST
#endif
#define STR_CONST(name, value) NSString* const name = @ value
#include "ConstantList.h"
Enfin, le ConstantList.h
fichier contient les déclarations réelles et c'est tout:
// ConstantList.h
STR_CONST(kMyConstant, "Value");
…
Quelques points à noter:
J'ai dû redéfinir la macro dans le .m
fichier après l'avoir #undef
ing pour que la macro soit utilisée.
J'ai également dû utiliser #include
au lieu de #import
pour que cela fonctionne correctement et éviter que le compilateur ne voie les valeurs précédemment précompilées.
Cela nécessitera une recompilation de votre PCH (et probablement de l'ensemble du projet) chaque fois que des valeurs sont modifiées, ce qui n'est pas le cas si elles sont séparées (et dupliquées) comme d'habitude.
J'espère que cela est utile pour quelqu'un.