美文网首页
OC和Swift混编系列二(swift文件在pod的子模块)

OC和Swift混编系列二(swift文件在pod的子模块)

作者: iOS寻觅者 | 来源:发表于2024-05-17 14:36 被阅读0次

    前提:想要达到这么一个效果:写一个库,里面同时存在给外部调用的swift和oc文件,也有只供内部调用的oc文件(外部无法调用),那么就需要实现一个混编framework了。

    场景一、这个库采用pod模式创建的,安装podspec说明暴露给外部用的头文件就可以了,module.modulemap会自动生成的,注意要做出framework模式
    场景二、这个库是手动创建的,这需要注意以下地方

    1、给外部调用的oc头文件需要移动到public这一栏,同时加入到Compile Source,并且在项目名.h文件中使用#import <项目名/xxx.h>的形式导入。
    2、在framework内是无法使用bridging-header文件的,因此想要实现swift调用oc,那么就需要用到module.modulemap文件与umbrella header了。新建一个.h文件,以#import "xxx.h"的方式导入所有oc头文件(包括提供给外部调用的)。
    module.moduleMap格式网上有说,这里直接贴代码:
    arduino复制代码//注意module名不能与项目名重复
    module SwiftAndOCLibraryPrivate {
    umbrella header "SwiftAndOCLibraryPrivate.h" - 这里填新建的.h文件
    export *
    }

    umbrella header的作用个人理解是以循环的形式把SwiftAndOCLibraryPrivate.h里面导入的所有头文件导出到当前模块。如果是单个oc头文件,可以用header,如果是多个oc头文件,只能用umbrella header导出。
    之后在swift文件import SwiftAndOCLibraryPrivate就可以调用oc了。
    3、oc想要调用swift,swift类必须用@objc + public修饰,否则无法访问。同时必须在oc文件#import <项目名/项目名-Swift.h>文件,这个文件是编译器自动生成的。

    相关文章

      网友评论

          本文标题:OC和Swift混编系列二(swift文件在pod的子模块)

          本文链接:https://www.haomeiwen.com/subject/gdoifjtx.html