-1

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

typedef enum
{
    AnimalTypeBear,
    AnimalTypeCamel,
    AnimalTypeCow,
    AnimalTypeCount

}
AnimalType;

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

AnimalType animalType = 0;

是否可以从该animalType变量中以某种方式派生字符串“Bear”,或者只是一般地访问其相应常量类型的字符串(在这种情况下AnimalTypeBear)。

4

2 回答 2

1

枚举是像#define 这样的常量表达式。编译时的枚举将作为常量“翻译”到代码中(而 #define 将在编译之前进行评估)。所以基本上不可能以这种方式引用枚举字符串。

正如其他人所建议的,您可以使用字符串数组。

于 2013-07-15T19:58:51.830 回答
0

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

如果您热衷于此并且不介意工作,只要它是可重用的,那么您需要了解如何从二进制文件中读取符号表结构,并确保不会从您的应用程序中删除信息。您将看到调试器可以显示正确的文字,如果您使用 Xcode 的“产品 > 生成输出 > 程序集文件”菜单项,您将看到文字作为字符串存在。这对您来说将是很多工作,但一旦完成就可以重复使用。

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

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

于 2013-07-15T20:25:25.237 回答