これは、多くの場合、ボディ内のすべての値を含むファイルのインクルードを使用して、場合によってはマクロを使用して実現されます。
ErrorCode_enum.h
MON_ENUM_VALUE(ErrorCode1, 1)
MON_ENUM_VALUE(ErrorCode2, 4)
MON_ENUM_VALUE(ErrorCode3, 74)
どこで可変マクロ展開MON_ENUM_VALUE
になります。
enum 宣言は次の形式を取る場合があります。
enum {
#include "mon_enum_value_begin.h" // defines MON_ENUM_VALUE and such
#include "ErrorCode_enum.h"
#include "mon_enum_value_end.h" // undefines MON_ENUM_VALUE and everything else defined in mon_enum_value_begin.h
};
typedef NSInteger MyErroCodes;
その後、次のように書くことができます。
#include "mon_enum_NSNumber_begin.h" // defines MON_ENUM_VALUE and such
#include "ErrorCode_enum.h"
#include "mon_enum_NSNumber_end.h" // undefines MON_ENUM_VALUE and…
また
#include "mon_enum_NSError_begin.h" // defines MON_ENUM_VALUE and such
#include "ErrorCode_enum.h"
#include "mon_enum_NSError_end.h" // undefines MON_ENUM_VALUE and…
これらのタグと値を他のタイプに追加または文字列化できます。
個人的には、マクロは大雑把で、別のアプローチを取るだけだと思います (確かに、書くのはもっと面倒かもしれません)。