迁移工作总结,喜忧参半

作者:计算机知识

此次Swift 3 到 4 的搬迁代码要转移的地点比相当少,花了一个上午的年华就做到了迁移。斯威夫特把本来 4.0 的对象从 ABI 稳固改为了源码宽容,此番代码的宽容性做的确实很好,那一个目的到底到达了。可是对于贰个成熟的类型来说,单纯语法上的合作实际不是漫天,这一次的晋级换代也带动了一些新的变迁。

写在前方

  • 斯维夫特 3.0 正式版公布了大半快三个月了,陆续的把手上和 Swift相关的搬迁到了Swift 3.0。所以写点小总括。

在 3.0 的时候 swift 也提供了 2.3 和 3.0 多少个版本,此次 4.0 也是提供了 3.2 版本。从笔者项目里的代码来看,从 3.0 到 3.2 要做的更动大概从不,只是须求重新编译一遍。社区的反响来看宽容 3.2 也没反映出什么大的变动。所以对于推迟跟进 4.0 的协会来言会是一个很顺滑的过于,可以欣慰的切换来 Xcode 9。

背景

为了让我们在搬迁进程中国和越南社会主义共和国发弹无虚发,swift 的 framework 扶植 3.2 和 4.0 版本混编。如若您有几许个构件,能够单独为有个别组件晋级到 4.0 。那样大的团体能够毫不一口气全体的代码都迁移到 4.0。但是 3.2 和 4.0 的配归总不曾看起来那么美好。

代码量(4万行)

  • 率先,小编是当年新春才初叶出手Swift 的。加上 Swift 的 ABI 和 API 一向不安静,所以未有在类型中山高校范围的施用,所以此次迁徙的代码量相当少,大约在4万行左右。

图片 1

搬迁时间(一天左右)

  • 搬迁时间上的话,差不离是花了1天左右。多个混编项目,三个Swift 为主的种类。期中 斯维夫特 为主的种类花了大概大半天时日,三个混编代码量大约,不过三个花了小半天,还会有叁个大七只花了半个钟头(原因先留个悬念~)。

率先是cocoapods的题目,反正在近些日子pods的framework只好钦赐三个版本的swift。issue在那间:Pods automatically compiling with 斯维夫特 4.0 in Xcode 9 beta 1 。pod暗中认可会使用四个swift版本编写翻译全体,需求对两样的库独立钦定swift版本。

准备

在支付最先开辟选择 斯维夫特的时候的好些个核定也让自己这一次少了累累职业量。

分界面用 xib 而不用纯代码

  • 一差二错的,和 斯威夫特相关的绝大好多分界面都是用xib 画的。而那些 xib 在这里次迁徙中获得了不小的优势,xib 和 SB 的代码不适配 Swift3。想当初借使利用代码写的 UI 的话,这一次迁徙改造预计会多众多吧。

有关第三方库的选项:

  • 对于三个门类来讲,三方库仿佛成了一道必选菜,然而怎么去筛选那道菜呢?
  • 对此三方库,当初的选项是,能用 OC 就硬着头皮用 OC。 毕竟能够OC 能够无缝衔接到 Swift,而且还相对安静。
  • 在增选 斯维夫特相关的三方库时,我竭尽值接受使用者比非常多的库,举个例子Alamofire、Snap、Kingfisher、法布里c 等,因为使用者比超级多,开垦者会更愿意去尊敬,而不致于跳票。所以不会设有今后不胜枚举小伙伴面前遭受的难点,想迁移,然则有些库未有更新。至少对于本人来讲,当自家想迁移的时候,全数和 Swift 相关的三方库都早已搬迁到了 3.0 了。

得益于上面两点,在搬迁进程中少了大多专门的学问量。

遇上那几个标题后,我把全部组件都迁移到了 4.0 ,app 因为有不知凡几事务代码,希望先迁到 3.2 ,那样能够连忙扶植 Xcode 9,同事能够飞快适配 iOS 11。然则。。。

文化储备晋级

先了然了一下斯维夫特 2 到 Swift 3 的校勘,及改换的由来。(看完心中一万头草泥马飞过,然而实际是越来越好了)

  • Swift官博:
  • 迁移工作总结,喜忧参半。swift-evolution:
  • Swift 3 新特征一览:

接下来把语乌克兰语档急迅的器重建议了壹遍。

  • Swift Programming Language:
  • 中文版:

图片 2

搬迁中的难题

Xcode 果然没让小编大失所望啊,编写翻译的时候从不不当提醒只报告您没戏了:

Any && AnyObject

自家想在做动员搬迁和做完迁移的同窗改的最多的三个便是 as AnyObjct? 吧?

起码对于本身来正是的。

和那几个相关的基本是集聚类型。在 斯维夫特 第22中学我们二个用 [AnyObject] 来存放纵何变量,以至于存放struct类型的 String、Array 等。可是按道理 Swift的 AnyObject 指的是类,而 Any 才是回顾struct、class、func 等有着品种。可是为何 Struct 可以放入 [AnyObject] 呢?在 Swift2 的时候会针对String、Int 等 Struct 进行叁个 Implicit Bridging Conversions。而到了 Swift 3 则开展了叁个**Fully eliminate implicit bridging conversions from Swift**改动。

当然在自个儿的门类中[AnyObject]实在是细节,最费力的正是 [String:AnyObject]。因为那个时候写项目标时候,依然处于 OC To 斯威夫特 的阶段所以对于 Dictionary ,基本使用了 [String:AnyObject], 所以在改善的时候,在超多地点为了这一个修改。

  • 胚胎,笔者是照着 Xcode 的升迁,在 Dictionary 前边的 value 前面加了叁个 as AnyObjct?
  • 新兴慢慢的意识笔者做了一件很傻比的作业,其实本身借使把 [String:AnyObject] 改为 [String:Any] 就能够了。

那相当于怎么在首先混编的类型中作者花了那么多日子去更改代码了!得益于混编的第1个门类学习了 Yep 的笔触,是把 [String:AnyObject] 命名称叫二个叫做 JSONDictionary 的连串。所以在 Any && AnyObect 那些业务上,就花了一丝丝时刻。

图片 3

Alamofire 等三方库协理 iOS8

  • 就算说笔者使用的三方库都在第有的时候间将库晋级到了 斯威夫特 3 ,但是期中 Alamofire 和 Snap 三个库最低适配只扶助到了 iOS 9,为了制止和成品撕逼,不能不想方法消除这几个适配难题。下边以 Alamofire 为例
  • 其实三方库么,不分明只用 Cocoapods 的。所以筹划下载代码然后直接撸源码。
  • 先Alamofire的 Xcode 校订为压低适配 8.0,然后编写翻译查找不经过的函数,并剔除。(其实那些函数都是 iOS 9 新加的函数,所以删除不影响怎么着。)
  • 大要花了 半个钟头左右就足以删完了,然后径直拖到项目中就能够了~
  • Snap 其实只要拖进去就好了,近年来无需改正什么。

图片 4

@escaping

  • 那几个是本人在适配中最蛋疼的坑
  • 先是在看swift-evolution只是探听到@escaping 必得出示注脚。但是不通晓@escaping的闭包,在函数体内不能够再改过。

图片 5

Date && NSDate

  • 因为有个项目中央银行使的 DateTools 那么些工具。它有三个 NSDate Tools 的分类。
  • 只是在写 Swift 3 的进度中本人发觉只要变量是 Date 类型的不恐怕使用NSDate Tools 那个类型,必需出示评释 date as NSDate 那样技艺调用分类的一部分个方法。
  • 以此让使用 OC 的库的时候会觉获得这几个不安适,究竟比超多 NS 的前缀去掉了。全数都呈现注脚太不友好了。

CAAnimationDelegate

  • 这些其实相似是 Xcode 8 的修改。因为从前CAAnimationDelegate 是三个分拣。差非常少申明如下:

图片 6

  • 事情未发生前是在 vc 中假使重写一下 animationDidStart 函数就足以了。可是新的非常,开首认为是 斯维夫特 3 的浮动,不过实际是 Xcode 8 中的修改。将 CAAnimationDelegate 产生了一个协商。我感到到那个改良是为了适配 Swift 3 ?变化如下:

图片 7

因为宽度时间相比较长,其余的有的时候想不到了。未完待续吧…

图片 8

其他

再有为数不菲神秘的转换令你有如看不懂那几个语言了,所以建议在适配早先看一下底下的篇章。

  • 斯威夫特 3 新特征一览:
  • [Swift 3.0 – Released on September 13, 2016]
  • 再有@卓同学 的 Swift 3 一定要看类别:

再有多少个科学的计算

  • Swift 3 by 顾 鹏:
  • 适配 斯威夫特 3 的一点小经历和坑 by 图拉鼎:

compiling as Swift 3.2, with 'xxx' build as Swift 4.0(this is supported but may expose additional compiler issues)

总结

  • 简来讲之本次迁徙未有想像中的那么难过,即使议案的转移非常大,然则得益于 Xcode 8 的搬迁工具,本次迁徙开销时间十分的少,当然也许有望和笔者的代码量有提到~
  • 在搬迁完之后,再看代码,会发现斯威夫特 越来越幽雅了,最少相比较于 2 来讲好了无数,至于辛亏哪个地方?你本身写写不就了解了咯。
  • 最终,终于可以把 Xocde 7 卸载,再也不用顾虑三个联合开无脑闪退了!!!
  • 最后对于度岁的 Swift 4 只想说 快来呢~分分钟把您消除!
  • 骨子里适配之路才刚刚初步,因为 Xcode 8 自动转的代码并不曾很好的 斯威夫特 3 化。近年来只是说在 斯维夫特 3 能够编译通过了而已~

提示也很清奇,小编翻译一下:大家就算协理混编,可是也也许混出毛病,所以您要么别混了。不过传说丁子香园的体系近些日子是主 app 4.0,组件 3.2 混编是打响的。所以说呢,假诺要混能够碰碰运气。

更多

做事之余,写了点笔记,假若须求能够在作者的 GitHub 看。

 

正文作者:Damonwong(@王浙剑)  文章链接:

附带说下Xcode 9新的编译系统,小编这里根本编写翻译然则(只怕因为大家混OC?),并且从不其他错误提示。苹果的软件质量果然是过硬,面向运气编制程序。

图片 9

本文由bwin必赢发布,转载请注明来源

关键词: 565net网站 技术文档 Swift 喜忧参半 起点