Ios 如何在Swift中使用Objective-C代码和#define宏
我正试图在我的Swift项目中使用第三方Objective-C库。我已经成功地将库导入到Xcode中,并创建了一个Ios 如何在Swift中使用Objective-C代码和#define宏,ios,objective-c,macros,swift,Ios,Objective C,Macros,Swift,我正试图在我的Swift项目中使用第三方Objective-C库。我已经成功地将库导入到Xcode中,并创建了一个-bridgeing Header.h文件,允许我在Swift中使用Objective-C类 然而,我似乎遇到了一个问题:Objective-C代码包含一个带有宏的常量.h文件#define AD_SIZE CGSizeMake(320,50)。将常量.h导入我的-桥接头.h不会产生我的Swift应用程序可以使用的全局常量AD_SIZE 我做了一些研究,发现苹果的文档中说 “在Swi
-bridgeing Header.h
文件,允许我在Swift中使用Objective-C类
然而,我似乎遇到了一个问题:Objective-C代码包含一个带有宏的常量.h
文件#define AD_SIZE CGSizeMake(320,50)
。将常量.h
导入我的-桥接头.h
不会产生我的Swift应用程序可以使用的全局常量AD_SIZE
我做了一些研究,发现苹果的文档中说
“在Swift中,您可以使用函数和泛型来实现相同的功能
结果[作为复杂宏]没有任何折衷
不生成C和Objective-C源文件中的复杂宏
可用于您的Swift代码。”
在读了这篇文章之后,我通过在Swift中指定let AD_SIZE=CGSizeMake(320,50)
使它运行良好,但我希望在这些值在我不知道的情况下更改时保持与库的未来兼容性
在Swift或我的桥接头中是否有一个简单的修复方法?如果没有,有没有办法替换
#在Constants.h
中定义AD大小CGSizeMake(320,50)
,并使其与任何使用旧的AD大小
宏的现有Objective-C应用程序向后兼容?我通过替换
#定义广告大小CGSizeMake(320,50)
在库的常量.h
中,使用
extern CGSize const AD_SIZE代码>
及加入
CGSize const AD_SIZE={.width=320.0f,.height=50.0f}代码>
在库的Constants.m
文件中。我所做的是创建一个类方法,返回#define
例如:
.h文件:
#define AD_SIZE CGSizeMake(320, 50)
+ (CGSize)adSize;
+ (CGSize)adSize { return AD_SIZE; }
.m文件:
#define AD_SIZE CGSizeMake(320, 50)
+ (CGSize)adSize;
+ (CGSize)adSize { return AD_SIZE; }
和Swift:
#define AD_SIZE CGSizeMake(320, 50)
+ (CGSize)adSize;
+ (CGSize)adSize { return AD_SIZE; }
因为这是一个类方法,所以现在可以像#定义的那样使用它。
如果更改#define宏,它将反映在您创建的新方法中
迅速:
让size=YourClass.adSize()
在类声明之后编写常量。像这样
class ForgotPasswrdViewController: UIViewController {
let IS_IPHONE5 = fabs(UIScreen.mainScreen().bounds.size.height-568) < 1;
let Tag_iamTxtf = 101
类ForgotPasswrdViewController:UIViewController{
让IS_IPHONE5=fabs(UIScreen.mainScreen().bounds.size.height-568)<1;
让Tag_iamTxtf=101
你试过用静态CGSize
代替宏吗?哦,天哪。你认为有567.5像素高的手机吗?只要写bounds.size.height==568就行了。要知道你的宏的名字不好,因为在缩放模式下的iPod Touch或iPhone 6/7都有相同的高度。