之前写过一篇 Xcode Pods自己编写的库Development Pods中的OC和Swift混编https://blog.youkuaiyun.com/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();
987

被折叠的 条评论
为什么被折叠?



