【发布时间】:2011-03-15 02:37:30
【问题描述】:
我在 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);
谢谢。
【问题讨论】:
-
我不明白这是什么意思。你说过你想用它来清理 plist,但如果你使用它,你肯定必须测试返回的对象是否为 nil?为什么不只测试对象是否 isKindOfClass: expectedClass?
标签: objective-c macros