Распаковка упакованных примитивов (таких как enum) из NSArray или NSDictionary во время быстрого перечисления
Вы можете поместить примитивы в NSArray или NSDictionary, упаковав их с помощью синтаксиса @(). Например:
typedef enum {
MyEnumOne,
MyEnumTwo
} MyEnum
NSDictionary *dictionary = @{
@(MyEnumOne) : @"one",
@(MyEnumTwo) : @"two"
};
Но как вы тогда используете это с быстрым перечислением? Например, что-то вроде:
for (MyEnum enum in dictionary) {
...
}
Это приводит к ошибке Selector element type 'MyEnum' is not a valid object
1 ответ
@()
синтаксис создает в штучной упаковке NSNumber. Поэтому при перечислении обращайтесь к нему как к номеру NSN. Чтобы привести его обратно к перечислению, сначала извлеките целочисленное значение, затем приведите:
for (NSNumber *number in dictionary) {
MyEnum myEnum = (MyEnum)[number intValue];
...
}