背景:
ios工程中实现的oc和swift混编的方案和实现步骤已经很多了,在此不做赘述,本篇文章需要描述的是实现在framework下的混编。
解决方案:
必要的设置(framework target对应的buildsetting):
defines module - yes
product module name - framework名称
install objective-c compatibility header - yes
objective-c generated interface header - framework名称-swift
objective-c bridging header - framework名称/productmodulename-bridging-header.h(设置后编译会报错,后面会给出解决方案)
桥接文件-swift调用oc时可以在该文件中添加oc头文件
oc调用swift:
swift类使用@objcmembers进行修饰,继承自nsobject或其子类
swift类定义
#import "productname/productmodulename-swift.h"
一般默认为framework的名称
swift调用oc:
在productmodulename-bridging-header.h文件中引入swift需要调用的oc头文件
在这个桥接文件里面引用你想暴露给swift调用类的头文件
说明:这个桥接文件需要自己手动创建
坑:
在oc类中引用swift编译之后的头文件,必须采用"productname/productmodulename-swift.h"
方式,使用productmodulename-swift.h
方式,会提示找不到该文件
如果未设置objective-c bridging header,引用productname/productmodulename-swift.h头文件之后依然无法在oc类中调用swift类,因为设置objective-c bridging header后,才会编译swift类到productmodulename-swift.h中
设置objective-c bridging header后swift类被翻译成oc类,才可以被oc调用
设置objective-c bridging header后编译报错using bridging headers with framework targets is unsupported,解决方案就是修改productmodulename.h这个文件名称为其他名称,比如:productmodulenameheader.h
这个文件改动之后可能会出现头文件引用导致的问题,需要自己动手解决
以上就是framework中实现oc和swift的混编方案的详细内容,更多关于framework oc swift混编的资料请关注代码网其它相关文章!
发表评论