我的常量文件中有以下内容:
typedef enum
{
AnimalTypeBear,
AnimalTypeCamel,
AnimalTypeCow,
AnimalTypeCount
}
AnimalType;
如果我在代码中的某个位置声明了AnimalType
变量,请将其设置为AnimalTypeBear
:
AnimalType animalType = 0;
是否以某种方式从该animalType
变量中获取字符串“Bear”,或者只是为了访问其相应常量类型的字符串(在本例中为AnimalTypeBear
)。
答案 0 :(得分:1)
枚举是#define之类的常量表达式。编译时的枚举将作为常量“转换”到代码中(而编译前将评估#define)。所以基本上不可能以这种方式引用枚举字符串。
正如其他人所建议的那样,您可以使用字符串数组。
答案 1 :(得分:0)
如果没有(Objective-)C中的代码,则无法执行此操作。如果您希望能够在代码中使用实际的枚举文字作为字符串,或者在I / O期间使用语言支持,那么您需要使用具有枚举类型支持的语言,例如Pascal或Ada。
如果你渴望拥有它并且不介意工作,只要它是可重用的,那么你需要学习从二进制文件中读取符号表结构,并确保信息不会从你的应用程序中删除。您将看到调试器可以显示正确的文字,如果您使用Xcode的“Product> Generate Output> Assembly File”菜单项,您将看到文字作为字符串存在。这将为你做很多工作,但一旦完成就可以重复使用。
之后放弃并编写一些代码 - 一个简单的静态标签数组和一个索引操作。是的,如果你改变你的枚举,这是一个维护问题。
或者你可以写一些不同的代码,比如Ruby ... Xcode支持添加你自己的文件“类型”和运行脚本来(预)处理它们。因此,您可以定义一个文件类型“.enum”,并使用Ruby脚本将其转换为C枚举定义和代码以提供字符串。 Apple有使用Ruby以这种方式预处理文件的示例。一旦你有脚本,Xcode将完成其余的工作,在每次编译时,它将运行你的脚本将你的“.enum”转换为“.m”(或“.c”)并编译结果。这种方法通常是最好的,但对于只包含一件事的文件,例如本地化的字符串文件处理,通常不会在自己的文件中编写枚举声明。