gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:06:14 24 4
gpt4 key购买 nike

我正在尝试在我的 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 应用程序可以使用。

我做了一些研究,看到 Apple 文档 here under "Complex Macros"

“In Swift, you can use functions and generics to achieve the same results [as complex macros] without any compromises. Therefore, the complex macros that are in C and Objective-C source files are not made available to your Swift code.”

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

在 Swift 或我的桥接头中是否有一个简单的修复方法?如果没有,有没有办法替换 #define AD_SIZE CGSizeMake(320, 50)Constants.h并保持向后兼容任何使用旧 AD_SIZE 的现有 Objective-C 应用程序宏观?

最佳答案

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

例子:

.h文件:

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

.m 文件:

+ (CGSize)adSize { return AD_SIZE; }

在 Swift 中:

因为这是一个类方法,您现在几乎可以像使用#define 一样使用它。如果您更改 #define 宏 - 它会反射(reflect)在您创建的新方法中在 swift 中:

let size = YourClass.adSize()

关于ios - 如何在 Swift 中使用带有 #define 宏的 Objective-C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24133695/

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