我想使用类似的东西:
if (foo>0){
typedef enum {
Form_FirstName = 0,
Form_NamePrefix,
Form_LastName,
Form_Email,
Form_Phone
} Form;
} else {
typedef enum {
Form_FirstName = 0,
Form_LastName,
Form_Phone
} Form;
}
可以这样做吗?我应该在哪里这样做?在.m或.h?我想将它用于UITableView。
答案 0 :(得分:3)
没有
首先,枚举是编译类型构造。
其次,你有一个范围问题。因为您要在if
和else
的范围内定义枚举类型。它不会在if..else..
语句之外具有可见性。
您需要找到一种不同的方法来区分基于状态的索引。
根据OP的后续问题进行更新:
好的,你需要某种地图。例如,您可以这样做:
定义您的枚举。
enum {
Form_FirstName = 0,
Form_NamePrefix,
Form_LastName,
Form_Email,
Form_Phone
};
假设您的班级有indexes
ivar,通常为@property
和@synthesize
,请设置索引:
if (foo>0) {
self.indexes = [NSArray arrayWithObjects:[NSNumber numberWithInt:Form_FirstName],[NSNumber numberWithInt:Form_NamePrefix],[NSNumber numberWithInt:Form_LastName],[NSNumber numberWithInt:Form_Email],[NSNumber numberWithInt:Form_Phone],nil];
}
else {
self.indexes = [NSArray arrayWithObjects:[NSNumber numberWithInt:Form_FirstName],[NSNumber numberWithInt:Form_LastName],[NSNumber numberWithInt:Form_Email],[NSNumber numberWithInt:Form_Phone],nil];
}
在其他地方,当您需要将枚举字段转换为索引时:
NSInteger index = [self.indexes indexOfObject:[NSNumber numberWithInt:<Form Enumeration Value>]];
答案 1 :(得分:1)
gschandler是对的,你做不到。从技术上讲,您可以使用预处理器命令
#if something
enum
#endif
但真正的问题是为什么你想要做到这一点。你觉得它会对你有什么影响?使用第一个枚举集没有坏处。谁在乎你是否使用 form_email?坐在那里不会造成任何伤害。