Ho scritto una macro in Objective-C per eseguire un cast sicuro. Ecco come si presenta finora:Objective-C Safe Casting Macro
#define SAFE_CAST(OBJECT, TYPE) ([OBJECT isKindOfClass:[TYPE class]] ? (TYPE *) OBJECT: nil)
Questo funziona davvero bene, ma sarebbe bello se ci fosse un modo per memorizzare oggetto in una variabile in modo che non ha ottenuto chiamato due volte. Ad esempio, utilizzando la macro come ad esempio:
NSString *str = SAFE_CAST([dictinary objectForKey:key], NSString);
risultati in codice simile a questo quando la macro viene espansa:
NSString *str = ([[dictinary objectForKey:key] isKindOfClass:[NSString class]] ? (NSString *) [dictinary objectForKey:key]: nil);
preferirei per farlo funzionare più come questo:
id obj = [dictionary objectForKey:key];
NSString *str = ([obj objectForKey:key] isKindOfClass[NSString class]] ? (NSString *) obj : nil);
Grazie.
non vedo quale sia il punto di questo è. Hai detto che vuoi usarlo per disinfettare i plists, ma sicuramente se lo usi devi testare se l'oggetto restituito è nullo? Perché non testare solo se l'oggetto è KindOfClass: expectedClass? – JeremyP