adicional que se extiende sobre la sugerencia de Graham Lee ...
Se podría utilizar un objetivo-c category con el fin de añadir un método para NSMutableDictionary que le permite añadir un valor con una clave de su tipo no NSObject . Esto mantiene su código libre de la sintaxis de envolver/desenvolver.
Una vez más, asumiendo
enum ETest { FOO, BAR };
En primer lugar, vamos a añadir un constructor convencer a NSValue:
@interface NSValue (valueWithETest)
+(NSValue*) valueWithETest:(enum ETest)etest;
@end
@implementation NSValue (valueWithETest)
+(NSValue*) valueWithETest:(enum ETest)etest
{
return [NSValue value: &etest withObjCType: @encode(enum ETest)];
}
@end
A continuación vamos a añadir soporte 'enumeración eTest' a NSMutableDictionary
@interface NSMutableDictionary (objectForETest)
-(void) setObject:(id)anObject forETest:(enum ETest)key;
-(id) objectForETest:(enum ETest)key;
@end
@implementation NSMutableDictionary (objectForETest)
-(void) setObject:(id)anObject forETest:(enum ETest)key
{
[self setObject: anObject forKey:[NSValue valueWithETest:key]];
}
-(id) objectForETest:(enum ETest)key
{
return [self objectForKey:[NSValue valueWithETest:key]];
}
@end
El ejemplo original se puede transformar a
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject: @"Bar!" forETest:BAR];
NSLog(@"getting value Bar -> %@", [dict objectForETest: BAR]);
[dict release];
Dependiendo de cuánto use su enumeración para acceder al diccionario, esto puede facilitar bastante la legibilidad de su código.
Gracias! Eso funcionó absolutamente genial :) – PlagueHammer