Ulteriori estende su suggerimento da Graham Lee ...
Si potrebbe usare un obiettivo-c category al fine di aggiungere un metodo per NSMutableDictionary che permette di aggiungere un valore con una chiave del tipo non NSObject . Ciò mantiene il tuo codice libero dalla sintassi wrapping/unwrapping.
Anche in questo caso, assumendo
enum ETest { FOO, BAR };
In primo luogo, stiamo aggiungendo un costruttore convincerlo 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
successiva dovremo aggiungere il supporto 'enum ETEST' per 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
L'esempio originale può essere quindi trasformato in
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject: @"Bar!" forETest:BAR];
NSLog(@"getting value Bar -> %@", [dict objectForETest: BAR]);
[dict release];
A seconda di quanto si utilizza l'enumerazione per accedere al dizionario, ciò potrebbe facilitare un po 'la leggibilità del proprio codice.
Grazie! Ciò ha funzionato in modo eccellente :) – PlagueHammer