2015-02-21 7 views
1

Вы можете поместить примитивы в 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. Поэтому при перечислении обращайтесь к нему как к NSNumber. Чтобы вернуть его обратно в перечисление, сначала извлеките целочисленное значение, затем выполните литье:

for (NSNumber *number in dictionary) { 
    MyEnum myEnum = (MyEnum)[number intValue]; 
    ... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^