Autobox TypeDefs в Objective-C (LLVM 4+)

У меня есть этот тип Enum с TypeDef:

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

И я хотел бы иметь возможность поместить их в массив, как это:

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

но это не сработает, и даже это не сработает:

NSNumber *test = @ControlDisplayOptionNone;

единственный вариант, который будет работать, является традиционным:

return @[[NSNumber numberWithInt:ControlDisplayOptionNone]];

Есть ли способ использовать автобокс для этого?

1 ответ

Решение

Используйте скобки: @(ControlDisplayOptionNone)

Синтаксис объясняется в документации Clang для литералов Objective-C. Раздел "В штучной упаковке" говорит:

Каркасы какао часто определяют постоянные значения, используя перечисления. Несмотря на то, что значения перечисления являются целыми, они не могут использоваться непосредственно в виде коробочных литералов (это позволяет избежать конфликтов с будущим '@'ключевые слова Objective-C с префиксом). Вместо этого значение enum должно быть помещено в рамку выражения.

Другие вопросы по тегам