Objective-C中的Autobox TypeDefs(LLVM 4+)

时间:2013-01-15 17:24:54

标签: objective-c autoboxing

我有这种类型的带有TypeDef的枚举:

typedef enum {
    ControlDisplayOptionNone = 0,
    ControlDisplayOptionOne = 100
} ControlDisplayOption;

我希望能够将它们放在这样的数组中:

- (NSArray *)displayOptions {
    return @[@ControlDisplayOptionNone];
}

但这不起作用,即使这样也行不通:

NSNumber *test = @ControlDisplayOptionNone;

唯一可行的选择是传统的:

return @[[NSNumber numberWithInt:ControlDisplayOptionNone]];

有没有办法为此使用自动装箱?

1 个答案:

答案 0 :(得分:5)

使用括号:@(ControlDisplayOptionNone)

语法在Clang documentation for Objective-C Literals中解释。 "盒装枚举"部分说:

  

Cocoa框架经常使用枚举定义常量值。虽然枚举值是不可变的,但它们可能不会直接用作盒装文字(这可避免与将来的'@' - 前缀的Objective-C关键字冲突)。相反,枚举值必须放在盒装表达式中。