项目swift2.3转swift3

一,前言

离苹果正式发布swift3也有大半年的时间了,一般主流的swift三方库也都基本转到swift3了,所以这次正好利用版本间隙的时间,把公司项目由swift2.3转到3上.(一两周前已成功转完,APP也系统的测试了一遍,现在已成功上线)我这个项目代码量也不是太多,从我正式开始转,大概花了七八天时间,最后测试系统的测了三天.总共大概花了10天的时间!!!

二,准备工作

1.在转swift3之前,建议先了解下swift3有哪些新的特性,以及苹果为什么打算这么修改.https://realm.io/cn/news/appbuilders-daniel-steinberg-whats-new-swift-3/ , 建议多看几篇类似的文章了解下.
2.强烈建议在swift2.3的环境下,就提前把一些老的代码风格替换掉,如CGRectMake 转为 CGRect等等,因为这些修改如果你想等切换到swift3再去修改的话,你会发现很蛋疼,因为到时候编译是报999+的错误

swift3切换后的错误数量.png

可以完全在切换到3之前把这些错误都解决了.下面我给出一个可以提前转换掉的列表(以前OC遗留的代码分格)

  • CGRectMake ----> CGRect
  • CGPointMake ----> CGPoint
  • UIEdgeInsetsMake ----> UIEdgeInsets
  • CGSizeMake ----> CGSize
  • CGRectZero ----> CGRect.zero
  • 字典和数组NSArray,NSDictionary这种写法改用swift的写法

ps:有些人会认为苹果会自动转化,没这个必要,其实对于一些简单的情况,苹果也确实会自动转化


项目swift2.3转swift3_第1张图片
苹果自动转换的.png

不过,我个人建议还是自己先提前转下,工作量也不算多,特别是对于数组,字典这种,转完就可以立马看效果.毕竟这个时候代码还是可以跑的.

三,正式开始转换

1.先处理三方库的问题
三方库有问题的也就是之前swift2.3的三方库,对于oc的库完全不受影响.我们只要找到三方库作者转化好的就行了,这部分代码不需要我们自己转.下面是我当时pod文件中做的处理.

项目swift2.3转swift3_第2张图片
podfile文件.png

对于还不支持swift3的三方库,如果代码量少的话,还可以将代码拖到项目中自己修改,对于代码量多的情况(一般三方库代码量都不少的),个人建议最好还是舍弃掉.我自己就把好几个界面的代码重写了下.
三方库的版本问题是否支出swift3,自行去github上查看.或者是去这查找 https://cocoapods.org/

2.切换swift环境到swift3


项目swift2.3转swift3_第3张图片
切换到swift3.png

对于,转化的目标文件,我们只需选取我们自己写的代码就行了,三方的库都不要勾选


项目swift2.3转swift3_第4张图片
选取转化目标.png

点击next,我们就进入了苹果自己转换的预览界面了
屏幕快照 2016-12-29 上午11.00.12.png
屏幕快照 2016-12-29 上午11.00.36.png
项目swift2.3转swift3_第5张图片
屏幕快照 2016-12-29 上午11.02.45.png
屏幕快照 2016-12-29 上午11.03.22.png

这里,我们就只要点击浏览浏览,默认选取就可以了,这里你可以多停留些时间,把这些语法看看,正好自己可以对swift3的新特性再增强下了解.

3.可能遇到的问题!!
如果你发现所用成功使用swift3的三方框架都是报错的


项目swift2.3转swift3_第6张图片
使用swift3代码的三方库还是报错.png

那是因为你三方的swift3的代码还是用的swift2.3的编译方式,切换下就行了.

项目swift2.3转swift3_第7张图片
单个处理方式,这个方法不太好.png

这个方法不太好(要逐个解决),简单点的方法,去项目中把pod文件夹里面的数据都删了,重新 pod install下.

项目swift2.3转swift3_第8张图片
简单的处理方式.png

4.最后一步处理(花费时间最多的)
接下来就是手动处理,错误的代码了,这个地方一定要耐心处理,不然往后项目中有些小错误你要定位很久的.

项目swift2.3转swift3_第9张图片
单次解决一个类型的错误.png

这里,解决错误还是建议,一个一个类型的错误统一处理,不然最后改的眼花缭乱,感觉状态不好,就立马放下键盘,待会再处理.心急吃不了热豆腐.

最后,就自求多福了...........希望能对你有所帮助.

你可能感兴趣的:(项目swift2.3转swift3)