从常量枚举派生字符串



我的常量文件中有以下内容:

typedef enum
{
    AnimalTypeBear,
    AnimalTypeCamel,
    AnimalTypeCow,
    AnimalTypeCount
}
AnimalType;

如果我在代码中的某个地方声明一个AnimalType变量,如下所示,并将其设置为AnimalTypeBear:

AnimalType animalType = 0;

是否可以从animalType变量中以某种方式导出字符串"Bear",或者只是访问其相应常量类型的字符串(在本例中为AnimalTypeBear)。

枚举是像#define这样的常量表达式。编译时的枚举将作为常量"翻译"到代码中(而#define将在编译前求值)。因此,基本上不可能以这种方式引用枚举字符串。

按照其他人的建议,您可以使用字符串数组。

如果没有(Objective-)C中的代码,就无法做到这一点。如果您希望能够在代码中使用实际的枚举文字作为字符串,或者在I/O期间使用语言支持,那么您需要使用具有枚举类型支持的语言,如Pascal或Ada。

如果你很想拥有它,并且不介意工作,只要它是可重复使用的,那么你需要学习如何从二进制文件中读取符号表结构,并确保信息不会从你的应用程序中剥离。你会看到调试器可以显示正确的文字,如果你使用Xcode的"产品>生成输出>程序集文件"菜单项,你会看到文字以字符串的形式存在。这对你来说将是一项艰巨的工作,但一旦完成,它将是可重复使用的。

之后放弃并编写一些代码——一个简单的静态标签数组和一个索引操作。是的,如果您更改了您的枚举,这将是一个令人头疼的维护问题。

或者,你可以写一些不同的代码,比如用Ruby。。。Xcode支持添加您自己的文件"类型"并运行脚本来(预)处理它们。因此,您可以定义一个文件类型".enum",并使用Ruby脚本将其转换为C枚举定义和代码来提供字符串。苹果公司有使用Ruby以这种方式预处理文件的例子。一旦你有了脚本,Xcode将完成剩下的工作,在每次编译时,它都会运行你的脚本,将你的".enum"转换为".m"(或".c"),然后编译结果。这种方法通常是最好的,但对于只包含一件事的文件,例如本地化字符串文件处理,您通常不会在它们自己的文件中编写枚举声明。

最新更新