欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Framework中实现OC和Swift的混编方案,

来源: 开发者 投稿于  被查看 32163 次 评论:167

Framework中实现OC和Swift的混编方案,


目录
  • 背景:
  • 解决方案:
    • OC调用Swift:
    • Swift调用OC:
  • 坑:

    背景:

    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混编的资料请关注3672js教程其它相关文章!

    您可能感兴趣的文章:
    • Swift中的HTTP请求体Request Bodies使用示例详解
    • 在 Swift 中测试 UIAlertController的方法
    • Swift设计思想Result<T>与Result<T, E: Error>类型解析
    • Swift Error重构的基础示例详解
    • Swift使用enum抹平数组元素差异实例详解
    • Swift enum枚举类型使用详解
    • Swift中的HTTP模拟测试示例详解

    用户评论