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

Dan*_*ark 1 autoboxing objective-c

我有这种类型的Enum与TypeDef:

typedef enum {
    ControlDisplayOptionNone = 0,
    ControlDisplayOptionOne = 100
} ControlDisplayOption;
Run Code Online (Sandbox Code Playgroud)

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

- (NSArray *)displayOptions {
    return @[@ControlDisplayOptionNone];
}
Run Code Online (Sandbox Code Playgroud)

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

NSNumber *test = @ControlDisplayOptionNone;
Run Code Online (Sandbox Code Playgroud)

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

return @[[NSNumber numberWithInt:ControlDisplayOptionNone]];
Run Code Online (Sandbox Code Playgroud)

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

ben*_*ado 5

使用括号: @(ControlDisplayOptionNone)

Objective-C LiteralsClang文档中解释了该语法."Boxed Enums"部分说:

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