如何在 Swift 中使用带有 #define 宏的 Objective-C 代码

2024-03-24

我正在尝试在我的 Swift 项目中使用第三方 Objective-C 库。我已将库成功导入到 Xcode 中,并且制作了一个<Project>-Bridging-Header.h文件允许我在 Swift 中使用我的 Objective-C 类。

然而我似乎遇到了一个问题:Objective-C 代码包含一个Constants.h带有宏的文件#define AD_SIZE CGSizeMake(320, 50)。输入Constants.h进入我的<Project>-Bridging-Header.h不会产生全局常数AD_SIZE我的 Swift 应用程序可以使用。

我做了一些研究,发现苹果文档在“复杂宏”下 https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/buildingcocoaapps/InteractingWithCAPIs.html#//apple_ref/doc/uid/TP40014216-CH8-XID_20

“在 Swift 中,你可以使用函数和泛型来实现相同的目的 结果[作为复杂的宏]没有任何妥协。因此, 不创建 C 和 Objective-C 源文件中的复杂宏 可用于您的 Swift 代码。”

读完之后,我通过指定让它正常工作let AD_SIZE = CGSizeMake(320, 50)在 Swift 中,但我想在这些值在我不知情的情况下发生变化的情况下保持未来与库的兼容性。

在 Swift 或我的桥接标头中是否有一个简单的解决方案?如果不行的话有没有办法替代#define AD_SIZE CGSizeMake(320, 50) in Constants.h并保持与任何使用旧版本的现有 Objective-C 应用程序向后兼容AD_SIZE macro?


我所做的是创建一个返回#define 的类方法。

Example:

.h file:

#define AD_SIZE CGSizeMake(320, 50)
+ (CGSize)adSize;

.m file:

+ (CGSize)adSize { return AD_SIZE; }

在斯威夫特中:

由于这是一个类方法,您现在几乎可以像使用 #define 一样使用它。 如果您更改 #define 宏 - 它将反映在您创建的新方法中 在斯威夫特中:

让大小 = YourClass.adSize()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 中使用带有 #define 宏的 Objective-C 代码 的相关文章

随机推荐