在Java中,您可以创建具有多个值的枚举。 在Objective-C中,这不容易做到。 我已经阅读了很多有关此内容的页面,但我没有找到任何令人满意的内容,这样我就可以通过简单的方式使用枚举,并且将枚举声明及其不同的值保存在同一个文件中。 / p>
我想在enums.h中写这样的东西:
// ========================================
typedef enum {eRED, eGREEN, eBLUE} ColorEnum;
int colorValues[] = { 0xFF0000, 0x00FF00, 0x0000FF };
NSArray *colorNames = [NSArray arrayWithObjects:@"Red color", @"light green", @"Deep blue", nil];
// ========================================
并能够使用全局变量管理我的东西,如:
int color = colorValues[eRED];
但我不知道怎么写这个。 我有编译错误,如“ColorValues”定义了很多次。 或者,如果我只使用“静态”,我在.m文件中没有使用许多“ColorValues”...
你能帮帮我吗?
答案 0 :(得分:1)
你很接近 - 问题是你把数组的定义放在头文件中,其中多个编译单元最终复制它。把你的中间线:
int colorValues[] = { 0xFF0000, 0x00FF00, 0x0000FF };
到您的.m
个文件中,并将标题更改为:
extern int colourValues[];
您需要执行与colorNames
类似的操作。将标题更改为:
extern NSArray *colorNames;
然后声明实际对象并在.m
文件中初始化它。
答案 1 :(得分:1)
你的问题与枚举无关。它是在标题中定义变量(而不仅仅是声明它们),这就是问题所在。只需在标头中声明它们并将实现移动到实现文件。
此外,您不能在方法之外编写[NSArray arrayWithObjects…]
。在那里只允许静态初始值设定项(即,可以在编译时确定的值),而这样的消息仅在运行时解析。解决方案是将分配移动到初始化函数中(例如,init
表示单例,或initialize
表示类。)
答案 2 :(得分:1)
我尝试了以下像魅力一样的东西:
enums.h中的@interface enums
// here, the enum and its values are in the same place.
typedef enum {eRED, eGREEN, eBLUE} ColorEnum;
#define kColourValue { 0xFF0000, 0x00FF00, 0x0000FF }
extern int colourValues[];
@end
enums.m中的@implementation enums
int colorValues[] = kColourValue;
@end
你在Objective-C中有一个完美的Java样式枚举实现。 哇,两周的搜索......