背景:
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(设置后编译会报错,后面会给出解决方案)
OC调用Swift:
-
Swift类使用@objcMembers进行修饰,继承自NSObject或其子类
-
#import "ProductName/ProductModuleName-Swift.h"
Swift调用OC:
-
在ProductModuleName-Bridging-Header.h文件中引入Swift需要调用的OC头文件
说明:这个桥接文件需要自己手动创建
坑:
- 在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后编译报错using bridging headers with framework targets is unsupported,解决方案就是修改ProductModuleName.h这个文件名称为其他名称,比如:ProductModuleNameHeader.h
PS:如果有需要我进行补充的内容,请在评论区说明
转载时请注明“来自简书-EvenZhu”