大家好我有一个包含错误代码的枚举类型。
问题在于它们不是顺序的,即
enum{
ErrorCode1 = 1,
ErrorCode2 = 4,
ErrorCode3 = 74
}; typedef NSInteger MyErroCodes;
也可能有50个代码+所以我真的不想复制数据或手动操作,这是我在搜索中迄今为止所看到的。任何帮助将不胜感激。
答案 0 :(得分:3)
enum构造仅在编译时存在。在运行时,MyErrorCodes实例是普通整数,ErrorCodeN值只是普通的整数常量。没有办法在运行时从枚举中提取元数据(好吧,也许在调试信息等中,但你不想去那里......)。
我建议:
答案 1 :(得分:0)
这通常是使用包含某个文件中包含所有值的文件来完成的,有时使用宏:
<强> ErrorCode_enum.h 强>
MON_ENUM_VALUE(ErrorCode1, 1)
MON_ENUM_VALUE(ErrorCode2, 4)
MON_ENUM_VALUE(ErrorCode3, 74)
其中MON_ENUM_VALUE
将是变量宏扩展。
并且您的枚举声明可能采用以下形式:
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…
可以将这些标记和值添加或串行化为其他类型。
就个人而言,我认为宏是粗略的,只是采取其他方法(诚然,写可能更乏味。)