【问题标题】:Select an enum typedef by if-then-else conditional statement通过 if-then-else 条件语句选择枚举 typedef
【发布时间】:2011-12-08 20:06:16
【问题描述】:

我想使用类似的东西:

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。

【问题讨论】:

    标签: objective-c uitableview enums if-statement


    【解决方案1】:

    没有。

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

    其次,您有一个范围界定问题。因为您是在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>]];
    

    【讨论】:

    • 使用某种地图。要么由 C++ 的 STL 映射(如果你了解 C++)提供,要么使用 NSArray 自行开发。我已经使用NSArray 的示例更新了答案。
    • 好的,谢谢。我想我可以做到。它仍然比多个表格视图更容易:-)
    【解决方案2】:

    gschandler 是正确的,你不能那样做。从技术上讲,您可以使用预处理器命令

    #if something
        enum
    #endif
    

    但真正的问题是为什么您要执行上述操作。你认为它会为你做什么?仅使用第一个枚举集没有害处。谁在乎您是否使用 form_email?坐在那里没有任何害处。

    【讨论】:

    • 原因是我想在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 中使用一个开关。根据 if 语句,我想使用单元格或跳过单元格。我至少有 3 个不同的场景和超过 10 个单元格。
    • 这看起来也不错。但我认为另一个答案更传统。还是谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多