OC和Swift混编Frameowork优雅指南
cover
本文主要参考了优雅地开发Swift和Object C混编的Framework。不过实际发现,完全按照文章里面”优雅的处理方案“里面的说法操作,还是没法成功。我这里根据实际情况作出了调整。
- 参考的文章中在“优雅的处理方案”这个section之前的内容都是好用的,你可以用用来创立一个兼容OC和Swift的Cooca Touch Framework。
- 这里说的“优雅”,指的是控制OC部分接口暴露的问题(介绍可以参考原文部分)
原文里面只说了具体的操作步骤,没有高屋建瓴地说出这种方法的实际思路:事实上,采用module.modulemap
的方法是将OC部分打包成一个可以使用Swfit语句进行导入(import)的板块。以这个视角,我们再来梳理一下操作步骤:
新建一个module.modulemap
文件
文件里的内容如下:
module OCSource [system] { //因为module.modulemap和OCSource.h是在同一个文件夹的,假如不是同一个,路径要写全 header "OCSource.h" export *}
有一个容易犯错的问题是将这里的板块名字, OCSource命名为了Cocoa Touch Framework的名字。这样会导致编译出错,错误信息会提醒你Module名字重复定义。这里的名字要区别的Framework的名字,具体是什么可以自己自由选择。不过推荐和头文件的名字一致
后一步操作是把module.modulemap
的路径增加到Build Settings的Import Paths
中,这是为了让我们在Swift里面import
这个module的时候能够找到目标.
Import Paths in Build Settings
那么,这里的$(SRCROOT)/MixFramework
其实就是指的module.modulemap
的路径。
将OCSouce.h
文件的权限改为project
Header Visibility Settings
这可以让OCSource.h
不再对外可见。
而后,删除MixFramework.h(umbrella header)中#import 的OC header。
原文的内容到此结束,但是其实还是不够的。这时候假如编译,会发现你在Framework内部的Swift使用OCSource的地方都会报错说OCSource不存在。由于将OCSource.h
从umbrella header中删除之后Swift就无法看到这个文件了。然而,通过module.modulemap
文件我们将OCSource.h
及相关的OC文件打包成了了一个Swift板块,因而我们可以在Swift代码中import进来:
import OCSource
在报错的Swift文件中增加这个导入,即可以处理这个问题了.
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » OC和Swift混编Frameowork优雅指南