之前写过一篇 Xcode Pods自己编写的库Development Pods中的OC和Swift混编https://blog.csdn.net/IT_learner_lgq/article/details/143381312?spm=1001.2014.3001.5501

但之后发现这种方式打包库后在其他 Swft 项目调用时会暴露自己 OC 库的函数,所以采取了另一种思路,对原先自己的 OC 库进行一层 Swift 包装,之后通过 Swift 来控制导入导出,步骤如下:

1.在 OC 库中创建一个暴露目录 Module

2.创建 Module/Module.h

#ifndef Module_h
#define Module_h

// 这里存放要能被自己库 Swift 文件调用的 OC 头文件
#import '../xx/xxxx.h'

3.创建 Module/module.modulemap

module Module {
    umbrella header "Module.h"
    export *
}

4.创建包装 OC 功能的 Module/Module.swift

import Foundation
@_implementationOnly import Module    // 一定要加这句,代表别的 Swift 无法直接调用 Module 中的相关功能

// 调用的 OC 类 是 Module.h 中导出的
internal class xxx1: OC 类1 {
    override func xxx (){
        // 重写方法
    }
}

internal class xxx2: OC 类2 {
    // 如果不需要重写方法,就为空
}

5.创建暴露类 Project/ExposedModule.swift

import Foundation

public class ExposedModule {
    // 调用 Module 的代码
    let module1 = xxx1();
    let module2 = xxx2();
    public func exposedFunc(){
         module1.xxx();
         module2.xxx();
    }
}

6.打包 OC 库,再别的 Swift 项目中导入后,就可以直接使用如下代码,而不会暴露 OC 库中的内容了

import 打包库名

let module = ExposedModule();
module.exposedFunc();

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐