2011-07-12 15 views
18

¿Cómo se guarda un valor de enumeración en un diccionario?Guardar valores enum en un diccionario

Cuando intento el siguiente

enum someEnum 
{ 
    field0 = 0, 
    field1 = 1, 
    field2 = 2, 
}; 

enum someEnum someEnumObject; 

y trato de guardarlo en un diccionario utilizando

[dictionaryWithObjectsAndKeys NSDictionary:]

someEnumObject, @"enum", 

que recibo este

advertencia: cuestión semántica: entero incompatible a la conversión puntero del envío de 'comportamiento de enumeración' al parámetro de tipo 'id'

Respuesta

47

la siguiente manera para guardarlo en el diccionario,

[NSNumber numberWithInt:enumValue], @"enum", 

y se puede recuperar como,

enumValue = [[dictionary valueForKey:@"enum"] intValue]; 
7

Un enum es esencialmente un entero y objetos un NSDictionary tiendas, por lo que necesita para convertir su enum a un objeto. Un NSNumber que funcionan bien para esto:

[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:someEnumObject], @"enum", nil]; 
9

mejor uso literales NSNumber a convertir una enumeración en un objeto para que pueda almacenarse en NSDictionary:

[NSDictionary dictionaryWithObjectsAndKeys:@(someEnumObject), @"enum", nil]; 

literales proporcionan abreviaturas para escribir cosas, este diccionario se puede escribir como:

@{@"enum":@(someEnumObject)}; 

Leer más sobre literales aquí: http://clang.llvm.org/docs/ObjectiveCLiterals.html