Lan*_*opp 6 macros objective-c
我在Objective-C中编写了一个宏来执行安全转换.这是迄今为止的样子:
#define SAFE_CAST(OBJECT, TYPE) ([OBJECT isKindOfClass:[TYPE class]] ? (TYPE *) OBJECT: nil)
Run Code Online (Sandbox Code Playgroud)
这非常有效,但是如果有一种方法可以将OBJECT存储在一个变量中,那么它就不会被调用两次.例如,使用宏如此:
NSString *str = SAFE_CAST([dictinary objectForKey:key], NSString);
Run Code Online (Sandbox Code Playgroud)
扩展宏时导致代码与此类似:
NSString *str = ([[dictinary objectForKey:key] isKindOfClass:[NSString class]] ? (NSString *) [dictinary objectForKey:key]: nil);
Run Code Online (Sandbox Code Playgroud)
我更喜欢它更像这样工作:
id obj = [dictionary objectForKey:key];
NSString *str = ([obj objectForKey:key] isKindOfClass[NSString class]] ? (NSString *) obj : nil);
Run Code Online (Sandbox Code Playgroud)
谢谢.
Yuj*_*uji 10
您可以使用GCC扩展名为声明语句表达式有
#define SAFE_CAST(OBJECT, TYPE) ({ id obj=OBJECT;[obj isKindOfClass:[TYPE class]] ? (TYPE *) obj: nil; })
Run Code Online (Sandbox Code Playgroud)
也就是说,我认为这种情况通常是一种不好的方法,你需要经常使用SAFE_CAST它.切勿将不同类的对象放在数组中; 永远不要(IBAction)someAction:(id)sender为不同类的UI对象重用动作消息.那你通常不需要使用SAFE_CAST.
| 归档时间: |
|
| 查看次数: |
2115 次 |
| 最近记录: |