使用可选值创建枚举

时间:2014-07-29 01:38:38

标签: objective-c

我正在处理一些代码,这些代码通过使用枚举来列出访问数组的部分,如:

typedef NS_ENUM(NSUInteger, ReportSection) {
    Section1,
    Section2,
    Section3,
    Count
};

但是,如果[self _test]的计算结果为true,我需要修改它以添加新行。条件是在运行时确定的,所以我不认为我可以使用宏。结果代码为:

typedef NS_ENUM(NSUInteger, ReportSection) {
    Section1,
    Section2,
    NewRow // must be between section 2 and three
    Section3,
    Count
};

我正在使用现有代码,因此应将修改保持在最低限度。如果我总是使用第二种情况,并且总是包含可选行,那么我会遇到一个错误。

如果条件为真,有没有人有任何想法如何在不通过代码和递增枚举值的情况下执行此操作(我知道这是可能的,但我希望存在更优雅的解决方案)?

感谢您的帮助,如果看起来相当微不足道,我道歉。

1 个答案:

答案 0 :(得分:0)

不幸的是,objective-C不允许动态分配枚举。我有两个选择,但听起来两者都需要重构代码。将枚举中的值更改为属性并在运行时分配它们,例如

@property NSUInteger Section1;
@property NSUInteger Section2;
....

或创建具有相同值的struct,在初始化任何可能包含可选newRow的任何内容时初始化该结构。

您的代码不应该如此脆弱以至于它依赖于枚举并且如果需要进行任何修改则会中断。以此为契机,让自己更健壮。