布景:

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(设置后编译会报错,后边会给出解决计划)

    Framework开发 - Framework中实现OC和Swift的混编

    桥接文件-Swift调用OC时能够在该文件中增加OC头文件

OC调用Swift:

  • Swift类运用@objcMembers进行修饰,继承自NSObject或其子类

    Framework开发 - Framework中实现OC和Swift的混编

    Swift类界说

  • #import “ProductName/ProductModuleName-Swift.h”

    Framework开发 - Framework中实现OC和Swift的混编

    一般默以为framework的称号

Swift调用OC:

  • 在ProductModuleName-Bridging-Header.h文件中引入Swift需求调用的OC头文件

    Framework开发 - Framework中实现OC和Swift的混编

    在这个桥接文件里面引证你想露出给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中

    Framework开发 - Framework中实现OC和Swift的混编

    设置Objective-C Bridging Header后Swift类被翻译成OC类,才能够被OC调用

  • 设置Objective-C Bridging Header后编译报错using bridging headers with framework targets is unsupported,解决计划便是修正ProductModuleName.h这个文件称号为其他称号,比方:ProductModuleNameHeader.h

    Framework开发 - Framework中实现OC和Swift的混编

    这个文件改动之后可能会出现头文件引证导致的问题,需求自己着手解决