在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
收到一些小伙伴的来信,觉得可能下边没有表达清楚,先把大家关心的要点在此进行总结,有兴趣的可以看看下边的研究过程,没兴趣的直接看这段即可。
探究过程Xcode8发布了,随着Xcode8一起到来的还有Swift3.0。相信好多小伙伴已经兴冲冲的下载了Xcode8,并且打开了自己的Swift项目想要尽快将自己的项目切换到Swift3.0吧。 Tip:首先郑重提示,如果是Swift的项目:
我也是这么想的,用Xcode8打开自己的项目,首先提示我们Swift语法修改了,询问我们是否要迁移到Swift3.0,如图所示: 当然选择Convert了,选择后,如图所示: 选择转换到Swift3.0,一路Next之后,发现,发现依然报错,然后我就傻眼了。 仔细观察错误信息,发现报错大部分集中在了第三方框架SnapKit中,难道是SnapKit不支持Swift3.0,我们在GitHub上看到: 难道是由于我们项目中的SnapKit不是最新版本导致的? 这个时候我们应该去百度一下,发现好多人说要设置这个选项: 设置之后,有些小伙伴可能就编译成功了,有些小伙伴可能依然编译出错。那么编译未成功如何解决呢?下面我们就来研究一下这个编译选项到底该怎么设置。 正常来说,我们可以随便改自己写的代码,但是对于第三方的代码,如果我使用Cocopods导入的,一般会在代码的右上角看到这个锁形标志:
SnapKit适配Swift3.0既然SnapKit的作者说SnapKit已经支持Swift3.0了,那么我们就先来适配SnapKit,首先用Xcode8新建一个空项目,利用Cocoapods导入SnapKit. 打开工程,依然弹出这个选项: 刚才选择了Convert依然报错,可见不靠谱,这次我们全部选择Later。 编译后,报错: 错误提示我们依然是“Use Legacy Swift Language Version”这个选项的问题。 因为SnapKit已经支持了Swift3.0,所以我们选择No,不支持旧的Swift版本,即使用Swift3.0的语法。编译通过。我们再来看看我们写的代码生成的target的编译选项:
Tip:如果要使用Swift2.3的语法,请指定SnapKit的版本号为:0.22.0 ReactiveCocoa适配Swift3.0相信在好多人在Swift中使用了响应式编程,提到响应式编程,就不得不说说RAC了,RAC是一个重型的OC框架,但是为了在Swift中可以使用,作者提供了Swift的桥接文件,所以,在Swift项目中导入了RAC,都会包含一些Swift的文件,这些Swift的文件也需要适配。 GitHub上RAC的作者在readme中写到:
只找到了4.2.2版本的库,我不知道上边提到的RAC 5 和 RAC 4 分别指什么。只能先用这个版本了。同样的,新建一个工程: 使用Cocoapods导入RAC: 是否迁移到Swift3.0依然选择Later,编译,报错: 和SnapKit的错误一样,同样的,我们去设置ReactiveCocoa的targetsh设置一下参数:
我们尝试着把自己的target设置修改一下: 编译成功。 同时导入SnapKit和RAC现在分别导入SnapKit和RAC都编译成功了,但是可以看出SnapKit支持Swift3.0。RAC不支持。那么如果两个同时导入该选什么呢? 经过测试,如果同事导入两个框架,所有的target的设置都得选择Yes。(大家可以自己试一下,在此不做赘述。) 可以看到SnapKit既支持Swift3.0,也支持Swift2.3。那么它是如何做到的呢?通过查看源代码可以看到: 通过这样的宏来判断当前的Swift的编译版本来编译不同的代码段,从而实现兼容Swift2.3和Swift3.0。 Alamofire经过测试,Alamofire的4.0.0版本仅支持iOS9+和Swift3.0.x,如果想使用Swift2.3开发的同学可以安装Alamofire的3.5.0版本,设置所有的Use Legacy Swift Language Version为Yes。 总结
思考既然每个target有自己单独的编译设置,理论上应该在编译的时候按照各自的target的编译设置来按照不同的Swift的版本编译,这样我们就可以自己的代码使用3.0编写,第三方根据各自不同进行不同的编译设置。以后想要迁移到完全的Swift3.0也更容易一些。但是目前看来编译的时候是统一按照我们缩写的target来编译的,这样的话单独设置各自的target还有什么意义呢?或许还需要一些别的设置才可以实现各自独立编译?对此有了解的同学麻烦告知一下,在此先谢过了。
文/光无影(简书作者)
原文链接:http://www.jianshu.com/p/cbd650c9daad 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。 |
请发表评论