ank*_*shg 28 macros objective-c ios swift
我正在尝试在我的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 Complex文档中的Apple文档说明了这一点
"在Swift中,您可以使用函数和泛型来实现与复杂宏相同的结果,而不会有任何妥协.因此,C和Objective-C源文件中的复杂宏不能用于Swift代码."
阅读完之后,我通过let AD_SIZE = CGSizeMake(320, 50)在Swift中指定它可以正常工作,但是如果这些值在我不知情的情况下发生变化,我希望保持与库的未来兼容性.
在Swift或我的桥接头中是否有一个简单的解决方案?如果没有,有没有办法替换#define AD_SIZE CGSizeMake(320, 50)in Constants.h并使事物向后兼容任何使用旧AD_SIZE宏的现有Objective-C应用程序?
Yog*_*ton 12
我所做的是创建一个返回#define的类方法.
例:
.h文件:
#define AD_SIZE CGSizeMake(320, 50)
+ (CGSize)adSize;
Run Code Online (Sandbox Code Playgroud)
.m文件:
+ (CGSize)adSize { return AD_SIZE; }
Run Code Online (Sandbox Code Playgroud)
在斯威夫特:
由于这是一种类方法,您现在可以像使用#define一样使用它.如果更改#define宏 - 它将反映在您在Swift中创建的新方法中:
let size = YourClass.adSize()
我通过更换来解决这个问题
#define AD_SIZE CGSizeMake(320, 50)
在图书馆的Constants.h使用
extern CGSize const AD_SIZE;
并添加
CGSize const AD_SIZE = { .width = 320.0f, .height = 50.0f };
在图书馆的Constants.m文件中.
| 归档时间: |
|
| 查看次数: |
26336 次 |
| 最近记录: |