我在Objective-C中编写了一个宏来执行安全强制转换。以下是目前为止的情况:
#define SAFE_CAST(OBJECT, TYPE) ([OBJECT isKindOfClass:[TYPE class]] ? (TYPE *) OBJECT: nil)
这真的很好,但是如果有一种方法可以将对象存储在变量中,这样就不会被调用两次。例如,使用宏如下:
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);
谢谢。