Esta es una pregunta anterior, pero se puede actualizar para utilizar una sintaxis más moderna. En primer lugar, a partir de iOS 6, Apple recomienda que las enumeraciones se definen como:
typedef NS_ENUM(NSInteger, MyEnum) {
MyEnumValue1 = -1, // default is 0
MyEnumValue2, // = 0 Because the last value is -1, this auto-increments to 0
MyEnumValue3 // which means, this is 1
};
Entonces, ya que tenemos la enumeración representado como NSInteger
s internamente, podemos encajonarlos en NSNumber
s para almacenar como la clave para un diccionario .
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
// set the value
dictionary[@(MyEnumValue1)] = @"test";
// retrieve the value
NSString *value = dictionary[@(MyEnumValue1)];
EDIT: Cómo crear un diccionario Singleton para este fin
A través de este método, se puede crear un diccionario Singleton para ayudar con esto. En la parte superior de cualquier archivo que tenga, puede utilizar:
static NSDictionary *enumTranslations;
Luego, en su init
o viewDidLoad
(si está haciendo esto en un controlador de interfaz de usuario), se puede hacer esto:
static dispatch_once_t onceToken;
// this, in combination with the token above,
// will ensure that the block is only invoked once
dispatch_async(&onceToken, ^{
enumTranslations = @{
@(MyEnumValue1): @"test1",
@(MyEnumValue2): @"test2"
// and so on
};
});
// alternatively, you can do this as well
static dispatch_once_t onceToken;
// this, in combination with the token above,
// will ensure that the block is only invoked once
dispatch_async(&onceToken, ^{
NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
mutableDict[@(MyEnumValue1)] = @"test1";
mutableDict[@(MyEnumValue2)] = @"test2";
// and so on
enumTranslations = mutableDict;
});
Si desea que este diccionario sea visible externamente, mueva la declaración estática a su archivo de encabezado (.h
).
¿por qué no utiliza una matriz? – user102008