0

大家好,我有一个包含我的错误代码的枚举类型。

问题是它们不是连续的,即

enum{
    ErrorCode1                = 1,
    ErrorCode2                = 4,
    ErrorCode3                = 74
}; typedef NSInteger  MyErroCodes;

还有可能有 50 个代码 + 所以我真的不想复制数据或手动进行,这是我迄今为止在搜索中看到的。任何帮助将不胜感激。

4

2 回答 2

3

enum 构造仅在编译时存在。在运行时,您的 MyErrorCodes 实例是纯整数,而 ErrorCodeN 值只是纯整数常量。没有办法在运行时从你的枚举中提取元数据(好吧,也许调试信息等中有,但你不想去那里......)。

我建议:

  • 创建一个小脚本(Python、Perl 或其他)来生成将数字代码映射到字符串值的函数。在 XCode 中,如果您真的需要,您甚至可以在编译阶段运行代码生成器。
  • 在编译期间使用元编程或预处理器宏来生成这些函数。这需要一些思考,但可以做到。
于 2012-05-10T08:17:22.603 回答
0

这通常是通过包含一个文件来完成的,该文件包含某个正文中的所有值,有时还使用宏:

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…

这可能会将这些标签和值添加或字符串化到其他类型。

就我个人而言,我认为宏很粗糙,只是采取了替代方法(诚然,编写起来可能更乏味)。

于 2012-05-10T08:16:54.863 回答