通过if-then-else条件语句选择枚举typedef

时间:2011-12-08 20:06:16

标签: objective-c uitableview enums if-statement

我想使用类似的东西:

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。

2 个答案:

答案 0 :(得分:3)

没有

首先,枚举是编译类型构造。

其次,你有一个范围问题。因为您要在ifelse的范围内定义枚举类型。它不会在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?坐在那里不会造成任何伤害。