NSArray中枚举的所有值?

时间:2012-05-10 08:08:58

标签: objective-c ios cocoa-touch

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

问题在于它们不是顺序的,即

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

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

2 个答案:

答案 0 :(得分:3)

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

我建议:

  • 创建一个小脚本(Python,Perl或whatnot)来生成将数字代码映射到字符串值的函数。在XCode中,如果你真的想要,你甚至可以在编译阶段运行代码生成器。
  • 使用元编程或预处理器宏在编译期间生成这些函数。这需要一些思考,但可以做到。

答案 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…

可以将这些标记和值添加或串行化为其他类型。

就个人而言,我认为宏是粗略的,只是采取其他方法(诚然,可能更乏味。)