/ / Desempacotando primitivos compactados (como um enum) de NSArray ou NSDictionary durante a enumeração rápida - objective-c, enums, nsarray, nsdictionary, enumeração rápida

Desempacotando primitivos compactados (como um enum) de NSArray ou NSDictionary durante a enumeração rápida - objective-c, enums, nsarray, nsdictionary, enumeração rápida

Você pode colocar primitivos em um NSArray ou NSDictionary empacotando-os com a sintaxe @ (). Por exemplo:

typedef enum {
MyEnumOne,
MyEnumTwo
} MyEnum

NSDictionary *dictionary = @{
@(MyEnumOne) : @"one",
@(MyEnumTwo) : @"two"
};

Mas como você usa isso com enumeração rápida? Por exemplo, algo como:

for (MyEnum enum in dictionary) {
...
}

Isso resulta no erro Selector element type "MyEnum" is not a valid object

Respostas:

1 para resposta № 1

o @() sintaxe cria um encaixotado NSNumber. Portanto, ao enumerar, acesse-o como um NSNumber. Para lançá-lo de volta para um enum, extraia primeiro o valor inteiro, depois lance:

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