老旧历史工程添加OC-Swift混编-超快速集成指南
截止写稿,Swift 已经更新到 5.2 版本了。算是比较稳定的版本了,也确实可以加入到目前的工程中来,发挥swift的性能优势。
乘着新需求开发,也想能够实际使用下Swift,为了以后的纯Swift工程做准备。
一、Swift跟OC桥接分为2种情况
- OC类调用Swift类
1.1 在OC类中必须先导入头文件appname-swift.h(appname是您的工程名)该文件不可见,但可以import点进去查看。
1.2 这个文件里面大致是一点宏定义,然后你新建的Swift文件,都会生成在这个文件里面
1.3 这个文件是系统自动生成的,无需自己修改
唯一需要配置的就是在 Build Settings里面Objective-C Generated Interface Header Name里面配置下
- Swift调用OC类
2.1 在Swift类中必须在import头文件appNme-Bridging-Header.h(如果文件是自动生成的,appName一般为工程名)
2.2 如果你工程是oc工程,那么这个头文件在你第一次新建一个swift文件的时候,系统会提示你,是否要生成。
若是swift工程,那么在你第一次新建oc文件的时候,会提示。图示是oc工程第一次新建swift文件
2.3 若是选择了,没有自动生成,那么也不用担心,你可以自己新建一个头文件,命名可以自由,也可以按照系统那种样式,然后去 Build Settings 里面进行配置 Objective-C Bridging Header, 然后设置这个文件正确的路径
2.4 appNme-Bridging-Header.h文件中就是引入oc类的头文件,供swift调用,一般内容是这样的
以上算是成功把工程进行了混编
二、一些注意点
- 若是项目是自己制作的cocoapods的库,或是提供给其他人使用的组件代码,那么建议到Target - - Build Settings--Packging--Defines Module,将值改为YES。
如果设置为YES,会认为项目自定义自己的组件,允许项目通过组件的方式引入。
不是的话,也可以设置这个值,因为对本身工程没有其他影响。
- 针对编译优化,还有一个设置,需要我们设置
在User-Defined里添加SWIFT_WHOLE_MODULE_OPTIMIZATION = YES可以在debug选择Onone。可以加快我们debug调试时候的编译速度,具体原理可以自行搜索下。简单来说就是将所有文件合在一起编译,每次通过编译缓存,只编译每次修改的内容,从而加快了编译速度。
release 可以选择其他的编译优化选项。
- 个人发现,方法中带NS_REQUIRES_NIL_TERMINATION ,swift 无法调用 objc 中有参数个数不定的方法,可能需要修改oc中的方法名跟入参。
4.写入appNme-Bridging-Header.h中的oc类,这些类之间的引用也要相互理清,若是存在相互引用,会编译报错。
5.若你的工程是用cocoapods引用第三方库的(一般都是),那么podfile文件中记得添加
use_frameworks!
然后还有一些常用的swift库
到这里,基本是混编工程已经完成后,后续就是新增你的swift类,开始写页面。
最重要的是更换下oc的思路,开始swift的学习。