Я написал макрос в Objective-C для безопасного выполнения.Вот как это выглядит до сих пор:
#define SAFE_CAST(OBJECT, TYPE) ([OBJECT isKindOfClass:[TYPE class]] ? (TYPE *) OBJECT: nil)
Это работает очень хорошо, но было бы неплохо, если бы был способ сохранить OBJECT в переменной, чтобы он не вызывался дважды.Например, использование макроса как такового:
NSString *str = SAFE_CAST([dictinary objectForKey:key], NSString);
приводит к коду, похожему на этот, при развертывании макроса:
NSString *str = ([[dictinary objectForKey:key] isKindOfClass:[NSString class]] ? (NSString *) [dictinary objectForKey:key]: nil);
Я бы предпочел, чтобы он работал больше так:
id obj = [dictionary objectForKey:key];
NSString *str = ([obj objectForKey:key] isKindOfClass[NSString class]] ? (NSString *) obj : nil);
Спасибо.