gpt4 book ai didi

Objective-C 安全转换宏

转载 作者:太空狗 更新时间:2023-10-30 03:40:34 25 4
gpt4 key购买 nike

我在 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);

谢谢。

最佳答案

您可以使用名为语句 statement expressions 的 GCC 扩展拥有

#define SAFE_CAST(OBJECT, TYPE) ({ id obj=OBJECT;[obj isKindOfClass:[TYPE class]] ? (TYPE *) obj: nil; })

也就是说,我认为在需要大量使用 SAFE_CAST 的情况下,这通常是一种糟糕的方法。永远不要将不同类的对象放在一个数组中;永远不要为不同类的 UI 对象重用操作消息 (IBAction)som​​eAction:(id)sender。那么你通常不需要使用SAFE_CAST

关于Objective-C 安全转换宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3233773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com