swift组件调用oc库

2,308 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情
本文主要记录下开发过程中swift私有库中封装第三方的oc库的一些情况

1. swift项目使用oc库

正常情况这种情况比较简单使用桥接文件

  • 创建oc类,系统自动帮你创建桥接文件 image.png

  • 手动 我们创建.h 文件

image.png

BuildSetting 中放入桥接文件的位置

image.png

  • 导入三方文件

image.png

正常使用即可:

image.png

2. swift私有库使用oc类

对于swift私有库我们使用oc类可以直接使用,pod的时候会umbrella.h中帮我们桥接了。因此我们可以直接使用,不需要进行桥接

image.png

3. swift私有库使用第三方OC库

继续以友盟SDK为例,我们对友盟进行二次封装。开始的时候我是想的使用桥接文件进行导入供swift类使用。

image.png

之后按照网上的一些说法,创建一个oc类,暴漏oc类的.h中供给swift类使用,起到桥接的作用.

image.png

直接报错,应该是无法访问这个私有库,之后我尝试在工程中 在要编译的工程的目标下将Allow Non-modular Includes In Framework Modules的No值改为Yes

image.png

无法解决,应该我们的pod私有库不属于这个工程,编译的还是pod库不是工程。

之后仔细看了报错,应该是我们在使用swift库中使用oc类,不用我们桥接在pod的时候直接生成了umbrella.h中帮我们桥接了。

image.png

在oc类的.h使用三方封装的头文件是无法找到的,并没有公开。因为Xcode在默认情况下是不允许在framework中的头文件引入一个不属于任何Module的头文件,因此我们在oc类的.m文件中使用。

image.png

最终使用了oc的中间类来调用第三方的库,把方法暴漏出,供我们的swift类使用。

image.png