Sedikit modifikasi dari saran @Krizz, sehingga berfungsi dengan baik jika file header konstanta dimasukkan dalam PCH, yang agak normal. Karena aslinya diimpor ke PCH, itu tidak akan memuatnya kembali ke dalam .m
file dan dengan demikian Anda tidak mendapatkan simbol dan linker tidak senang.
Namun, modifikasi berikut memungkinkannya berfungsi. Agak berbelit-belit, tetapi berhasil.
Anda harus 3 file, .h
berkas yang memiliki definisi konstan, .h
file dan .m
berkas, saya akan menggunakan ConstantList.h
, Constants.h
dan Constants.m
masing-masing. isinya Constants.h
sederhana:
// Constants.h
#define STR_CONST(name, value) extern NSString* const name
#include "ConstantList.h"
dan Constants.m
file tersebut terlihat seperti:
// Constants.m
#ifdef STR_CONST
#undef STR_CONST
#endif
#define STR_CONST(name, value) NSString* const name = @ value
#include "ConstantList.h"
Akhirnya, ConstantList.h
file tersebut memiliki deklarasi aktual di dalamnya dan itu saja:
// ConstantList.h
STR_CONST(kMyConstant, "Value");
…
Beberapa hal yang perlu diperhatikan:
Saya harus mendefinisikan ulang makro dalam .m
file setelah #undef
itu untuk makro yang akan digunakan.
Saya juga harus menggunakan #include
alih-alih #import
agar ini berfungsi dengan baik dan menghindari kompilator melihat nilai yang sebelumnya dikompilasi.
Ini akan membutuhkan kompilasi ulang PCH Anda (dan mungkin seluruh proyek) setiap kali ada nilai yang berubah, yang tidak terjadi jika mereka dipisahkan (dan digandakan) seperti biasa.
Semoga bermanfaat bagi seseorang.