我正在尝试在我的Swift项目中使用第三方Objective- C库。我已经将该库成功导入到Xcode中,并且已经制作了一个<Project>-Bridging- Header.h文件,可以在Swift中使用Objective-C类。
<Project>-Bridging- Header.h
但是,我似乎遇到了一个问题:Objective-C代码包含Constants.h带有宏的文件#define AD_SIZE CGSizeMake(320, 50)。导入Constants.hmy <Project>-Bridging- Header.h不会导致AD_SIZE我的Swift应用程序可以使用的全局常量。
Constants.h
#define AD_SIZE CGSizeMake(320, 50)
AD_SIZE
我做了一些研究,发现“复杂宏”下面的Apple文档说:
“在Swift中,您可以使用函数和泛型来获得与复杂宏一样的结果,而无需做出任何妥协。因此,C和Objective- C源文件中的复杂宏无法用于您的Swift代码。”
阅读完这些内容后,我可以通过let AD_SIZE = CGSizeMake(320, 50)在Swift中进行指定来使其正常工作,但是如果这些值在我不知情的情况下发生变化,我想保持与该库的将来兼容性。
let AD_SIZE = CGSizeMake(320, 50)
在Swift或我的桥接标头中,有没有简单的解决方法?如果不是,是否有一种方法可以替换#define AD_SIZE CGSizeMake(320, 50)in Constants.h并保持其与使用旧AD_SIZE宏的任何现有Objective-C应用程序向后兼容?
我通过替换解决了
在图书馆的Constants.h使用
extern CGSize const AD_SIZE;
并添加
CGSize const AD_SIZE = { .width = 320.0f, .height = 50.0f };
在库Constants.m文件中。
Constants.m