大家好,我有一个包含我的错误代码的枚举类型。
问题是它们不是连续的,即
enum{
ErrorCode1 = 1,
ErrorCode2 = 4,
ErrorCode3 = 74
}; typedef NSInteger MyErroCodes;
还有可能有 50 个代码 + 所以我真的不想复制数据或手动进行,这是我迄今为止在搜索中看到的。任何帮助将不胜感激。
大家好,我有一个包含我的错误代码的枚举类型。
问题是它们不是连续的,即
enum{
ErrorCode1 = 1,
ErrorCode2 = 4,
ErrorCode3 = 74
}; typedef NSInteger MyErroCodes;
还有可能有 50 个代码 + 所以我真的不想复制数据或手动进行,这是我迄今为止在搜索中看到的。任何帮助将不胜感激。
enum 构造仅在编译时存在。在运行时,您的 MyErrorCodes 实例是纯整数,而 ErrorCodeN 值只是纯整数常量。没有办法在运行时从你的枚举中提取元数据(好吧,也许调试信息等中有,但你不想去那里......)。
我建议:
这通常是通过包含一个文件来完成的,该文件包含某个正文中的所有值,有时还使用宏:
ErrorCode_enum.h
MON_ENUM_VALUE(ErrorCode1, 1)
MON_ENUM_VALUE(ErrorCode2, 4)
MON_ENUM_VALUE(ErrorCode3, 74)
whereMON_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…
这可能会将这些标签和值添加或字符串化到其他类型。
就我个人而言,我认为宏很粗糙,只是采取了替代方法(诚然,编写起来可能更乏味)。