布景:
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
这个文件改动之后可能会出现头文件引证导致的问题,需求自己着手解决