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 должно быть помещено в рамку выражения.