新特点和迁移详解,迁移工作总计

By admin in 4858.com on 2019年4月27日

写在前边

  • 斯维夫特 3.0 正式版发表了大半快二个月了,断断续续的把手上和 斯维夫特相关的搬迁到了斯威夫特 三.0。所以写点小总括。

写在前头

  • 斯威夫特 三.0
    正式版宣布了大半快1个月了,断断续续的把手上和 Swift相关的搬迁到了Swift 三.0。所以写点小总括。

写在前方

  • Swift 3.0
    正式版发表了大半快二个月了,断断续续的把手上和 Swift相关的动员搬迁到了Swift 三.0。所以写点小计算。

写在日前

  • Swift 三.0 正式版发布了大半快半年了,断断续续的把手上和 斯威夫特相关的迁移到了Swift 三.0。所以写点小总括。

背景

背景

背景

背景

代码量(4万行)

  • 率先,小编是当年开春才起来动手 Swift 的。加上 Swift 的 ABI 和 API
    一向不安静,所以并未有在等级次序中山大学范围的使用,所以本次迁徙的代码量不多,差不离在4万行左右。

代码量(4万行)

  • 第1,小编是当年新春才起来出手Swift 的。加上 Swift 的 ABI 和 API
    一贯不地西泮,所以没有在项目中山大学范围的应用,所以本次迁徙的代码量不多,大致在40000行左右。

代码量(4万行)

  • 首先,作者是现年年终才起来初步Swift 的。加上 斯威夫特 的 ABI 和 API
    一向不安宁,所以没有在品种中山大学范围的选择,所以本次迁徙的代码量不多,大约在肆万行左右。

代码量(4万行)

  • 率先,我是二零一九年新年才初始起先 斯维夫特 的。加上 斯维夫特 的 ABI 和 API
    平素不牢固,所以没有在类型中山高校范围的运用,所以此番迁徙的代码量不多,大致在4万行左右。

搬迁时间(一天左右)

  • 搬迁时间上的话,大致是花了一天左右。多少个混编项目,一个 Swift
    为主
    的项目。期中 Swift 为主的种类花了大意上大半天时间,两个混编代码量差不离,不过多少个花了小半天,还有一个几近只花了半个钟头(原因先留个悬念~)。

搬迁时间

  • 搬迁时间上的话,大约是花了一天左右。五个混编项目,贰个Swift 为主的花色。期中 斯威夫特 为主的档次花了大要上海高校半天小时,多少个混编代码量大约,然则二个花了小半天,还有一个差不四只花了半个钟头。

搬迁时间(1天左右)

  • 搬迁时间上的话,大约是花了壹天左右。五个混编项目,1个斯威夫特 为主的类型。期中 Swift 为主的类型
    花了差不离大半天光阴,四个混编代码量大致,可是八个花了小半天,还有贰个大概只花了半个钟头(原因先留个悬念~)。

搬迁时间(一天左右)

  • 搬迁时间上的话,差不离是花了一天左右。多个混编项目,一个 Swift
    为主
    的项目。期中 Swift 为主的花色
    花了大致大半天时间,两个混编代码量大致,可是二个花了小半天,还有几个大致只花了半个钟头(原因先留个悬念~)。

准备

在付出最初开采采取 斯威夫特 的时候的多数裁定也让本人这一次少了好些个专门的工作量。

准备

在付出最初开采选用 斯威夫特的时候的累累裁定也让自家本次少了成千上万职业量。

分界面用 xib 而不用纯代码

  • 阴差阳错的,和 Swift相关的大多分界面都以用xib 画的。而这么些 xib
    在这一次迁徙中赢得了不小的优势,xib 和 SB 的代码不适配 Swift三。想当初倘诺运用代码写的 UI
    的话,此次迁徙退换揣测会多过多吧。

有关第3方库的选项:

  • 对此一个种类来说,三方库就像是成了一道必选菜,不过什么去选取那道菜呢?
  • 对此三方库,当初的挑选是,能用 OC
    就尽量用 OC。 终归能够OC 能够无缝衔接到
    斯威夫特,而且还相对平静。
  • 在选择 斯维夫特相关的3方库时,小编尽量值选用使用者相比较多的库,例如Alamofire、Snap、Kingfisher、法布里c
    等,因为使用者相比较多,开采者会更愿意去爱抚,而不致于跳票。所以不会设有今后众多同伙面临的难点,想迁移,不过有个别库未有创新。至少对于本人的话,当自身想迁移的时候,全部和
    斯维夫特 相关的叁方库都曾经搬迁到了 三.0 了。

得益于上面两点,在搬迁进度中少了重重专门的学业量。

准备

在支付最初开拓选拔 斯维夫特的时候的无数表决也让自身此番少了过多专门的学业量。

分界面用 xib 而不用纯代码

  • 阴差阳错的,和 Swift相关的大部分界面都以用xib 画的。而那几个 xib
    在此番迁徙中获得了不小的优势,xib 和 SB 的代码不适配 斯威夫特三。想当初即使选拔代码写的 UI
    的话,此番迁徙改变推测会多广大呢。

关于第三方库的挑选:

  • 对于一个类别来说,叁方库就像成了一道必选菜,然而什么去挑选这道菜呢?
  • 对此三方库,当初的挑选是,能用 OC
    就硬着头皮用 OC。 终归能够OC 能够无缝衔接到
    斯威夫特,而且还针锋相对平静。
  • 在选取 斯维夫特相关的叁方库时,作者尽恐怕值选择使用者相比多的库,举个例子Alamofire、Snap、Kingfisher、Fabric
    等,因为使用者相比较多,开采者会更乐于去保护,而不致于跳票。所以不会设有今后数不胜数同伙面临的主题材料,想迁移,不过有些库未有立异。至少对于笔者来讲,当本人想迁移的时候,全数和
    斯维夫特 相关的三方库都曾经搬迁到了 3.0 了。

得益于下面两点,在搬迁进程中少了过多职业量。

准备

在开采最初开拓选用 斯维夫特 的时候的无数决定也让本人此次少了好些个职业量。

分界面用 xib 而不用纯代码

  • 阴差阳错的,和 Swift 相关的一大半分界面皆以用xib 画的。而以此 xib
    在本次迁徙中获得了非常的大的优势,xib 和 SB 的代码不适配 斯维夫特3。想当初即使采纳代码写的 UI 的话,此番迁徙改造测度会多广大呢。

新特点和迁移详解,迁移工作总计。知识储备进级

先通晓了壹晃斯维夫特 二 到 Swift 三的更动,及改动的来由。(看完心中一万头草泥马飞过,可是实际上是更为好了)

  • Swift官博:
  • swift-evolution:
  • Swift 三新性格1览:

接下来把语法文书档案快捷的重复了叁回。

  • Swift Programming
    Language:
  • 中文版:

文化储备晋级

先领会了弹指间Swift 二 到 斯维夫特 3的退换,及更动的原因。(看完心中三千0头草泥马飞过,可是实际是越来越好了)

  • Swift官博:
  • swift-evolution:
  • 斯维夫特 叁新特征1览:

下一场把语法文书档案飞快的重复了2遍。

  • Swift Programming
    Language:
  • 中文版:

分界面用 xib 而不用纯代码

  • 阴差阳错的,和 斯威夫特 相关的大部分界面都以用xib 画的。而以此 xib
    在此次迁徙中得到了异常的大的优势,xib 和 SB 的代码不适配 Swift3。想当初倘若运用代码写的 UI 的话,本次迁徙改换猜想会多过多吗。

关于第3方库的挑选:

  • 对此3个类型以来,三方库仿佛成了1道必选菜,可是什么去采纳那道菜呢?

  • 对此3方库,当初的精选是,能用 OC 就尽量用 OC。 终归能够OC
    能够无缝衔接到 Swift,而且还相对平稳。

  • 在选择 Swift 相关的3方库时,笔者尽或者值采取使用者比较多的库,举个例子AlamofireSnapKingfisherFabric等,因为使用者相比多,开荒者会更乐于去维护,而不致于跳票。所以不会存在今后众多同伙面临的难点,想迁移,不过某些库未有更新。至少对于自身来讲,当笔者想迁移的时候,全数和
    Swift 相关的叁方库都曾经搬迁到了 三.0 了。

得益于下面两点,在搬迁进程中少了多数工作量。????

搬迁中的难点

搬迁中的难点

关于第3方库的精选:

  • 对此三个种类来说,叁方库就像成了一道必选菜,可是怎么样去选取那道菜呢?

  • 对于三方库,当初的采纳是,能用 OC 就玩命用 OC。 毕竟能够OC
    能够无缝衔接到 Swift,而且还相对稳固。

  • 在选择 Swift 相关的3方库时,笔者尽大概值选择使用者比较多的库,比方AlamofireSnapKingfisherFabric等,因为使用者相比多,开辟者会更愿意去维护,而不至于跳票。所以不会设有今后众多伙伴面临的难题,想迁移,但是某些库未有立异。至少对于本人的话,当本身想迁移的时候,全数和
    斯维夫特 相关的三方库都早已搬迁到了 三.0 了。

得益于下边两点,在搬迁进度中少了好些个职业量。????

知识储备晋级

  • 先领会了弹指间Swift 2 到 Swift 叁的退换,及改动的缘由。(看完心中三千0头草泥马飞过,可是其实是进一步好了)

    • Swift官博

    • swift-evolution

    • 斯威夫特 三新特色壹览

  • 然后把语法文书档案飞快的老调重弹了贰回。

    • Swift Programming Language

    • 中文版

Any && AnyObject

自身想在做动迁和做完迁移的同学改的最多的1个正是as
AnyObjct?吧?

最少对于本身来就是的。

和那么些相关的主导是汇集类型。在 Swift 2中我们多个用[AnyObject]来存吐弃何变量,甚至于存放struct类型的String、Array等。不过按道理
斯威夫特的AnyObject指的是类,而Any才是包罗struct、class、func等全数体系。可是怎么Struct能够放入[AnyObject]呢?在斯维夫特二的时候会针对String、Int等Struct实行三个 Implicit Bridging
Conversions。而到了斯维夫特 叁则开始展览了二个**Fully eliminate implicit
bridging conversions from Swift**改动。

理所当然在自家的品类中[AnyObject]实际是小事,最麻烦的正是
[String:AnyObject]。因为那时候写项目的时候,照旧处于OC To
斯威夫特的级差所以对于 Dictionary ,基本使用了 [String:AnyObject],
所以在改换的时候,在广大地点为了那么些修改。

  • 开场,笔者是照着 Xcode 的升迁,在
    Dictionary 后面包车型地铁 value 前边加了3个as AnyObjct?
  • 新生逐步的开采自家做了1件很傻比的事情,其实小编只要把
    [String:AnyObject] 改为 [String:Any] 就足以了。

那也等于怎么在第二混编的档期的顺序中笔者花了那么多时间去修改代码了!得益于混编的第三个类型学习了
Yep
的笔触,是把[String:AnyObject]取名叫二个称呼JSONDictionary的品种。所以在Any
&& AnyObect这一个专门的职业上,就花了一丝丝岁月。

4858.com 1

Alamofire 等3方库协理 iOS捌

  • 固然说小编动用的3方库都在第暂且间将库晋级到了
    Swift 3 ,不过期中 Alamofire 和 Snap 三个库最低适配只协理到了 iOS
    玖,为了幸免和产品撕逼,不得不想办法消除这些适配难点。下边以
    Alamofire 为例
  • 实在3方库么,不必然只用 Cocoapods
    的。所以筹划下载代码然后径直撸源码。
  • 先Alamofire的 Xcode 修改为最低适配
    八.0,然后编写翻译查找不通过的函数,并删除。(其实这一个函数都是 iOS 九新加的函数,所以删除不影响怎么着。)
  • 约略花了
    半个钟头左右就足以删完了,然后直接拖到项目中就足以了~
  • Snap
    其实借使拖进去就好了,临时不必要修改什么。

4858.com 2

@escaping

  • 其壹是自家在适配中最蛋疼的坑
  • 首先在看swift-evolution只是探听到@escaping
    必须出示注明。可是不精晓@escaping的闭包,在函数体内无法再修改。

4858.com 3

Date &&
NSDate

  • 因为有个连串中应用的
    DateTools 那一个工具。它有多少个 NSDate + Tools 的分类。
  • 只是在写 Swift 三的进度中本人开掘只要变量是 Date 类型的不能使用NSDate + Tools
    那几个体系,必须出示证明 date as NSDate
    那样本领调用分类的有的个法子。
  • 以此让使用 OC
    的库的时候会深感相当不舒适,究竟诸多 NS
    的前缀去掉了。全数都呈现评释太不团结了。

CAAnimationDelegate

  • 其一实在看似是
    Xcode 8 的修改。因为事先CAAnimationDelegate
    是1个分类。大致申明如下:

4858.com 4

  • 事先是在 vc
    中壹经重写一下 animationDidStart
    函数就能够了。不过新的格外,起头以为是 斯维夫特 3 的转移,不过事实上是
    Xcode 八 中的修改。将 CAAnimationDelegate
    造成了三个说道。笔者感觉那几个修改是为了适配 斯威夫特 三 ?变化如下:

4858.com 5

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

Any && AnyObject

自己想在做动员搬迁和做完迁移的同桌改的最多的二个便是 as
AnyObjct? 吧?

至少对于本人来就是的。

和那一个相关的着力是汇集类型。在 Swift 2中大家贰个用 [AnyObject] 来存抛弃何变量,以致于存放struct类型的 String、Array 等。然而按道理
Swift的 AnyObject 指的是类,而 Any 才是总结struct、class、func 等有着品种。可是为何 Struct 能够放入 [AnyObject] 呢?在 Swift2 的时候会针对String、Int 等 Struct 举办贰个 Implicit Bridging
Conversions。而到了 Swift 3 则开始展览了2个**Fully eliminate implicit
bridging conversions from Swift**改动。

本来在本人的档期的顺序中[AnyObject]实则是小事,最麻烦的便是
[String:AnyObject]。因为那儿写项目标时候,依旧处于 OC To
Swift 的等第所以对于 Dictionary ,基本使用了 [String:AnyObject],
所以在退换的时候,在大多地点为了那几个修改。

  • 开端,作者是照着 Xcode 的唤起,在
    Dictionary 前面包车型大巴 value 后边加了2个 as AnyObjct?
  • 新生慢慢的觉察本身做了1件很傻比的作业,其实小编如若把
    [String:AnyObject] 改为 [String:Any] 就能够了。

这也等于为啥在第贰混编的项目中作者花了那么多时间去修改代码了!得益于混编的第3个品类学习了
Yep
的笔触,是把 [String:AnyObject] 命名叫三个称作 JSONDictionary 的类型。所以在 Any
&& AnyObect 这些工作上,就花了一丢丢光阴。

4858.com 6

Alamofire 等叁方库支持 iOS八

  • 固然如此说笔者动用的三方库都在第一时半刻间将库晋级到了
    斯维夫特 叁 ,可是期中 Alamofire 和 Snap 多少个库最低适配只帮衬到了 iOS
    9,为了防止和制品撕逼,不得不想方法化解那一个适配难题。上面以
    Alamofire 为例
  • 事实上3方库么,不肯定只用 Cocoapods
    的。所以盘算下载代码然后径直撸源码。
  • 先Alamofire的 Xcode 修改为最低适配
    八.0,然后编写翻译查找不通过的函数,并删除。(其实那么些函数都以 iOS 玖新加的函数,所以删除不影响什么。)
  • 差不多花了
    半个小时左右就可以删完了,然后径直拖到项目中就足以了~
  • Snap
    其实只要拖进去就好了,权且不须求修改什么。

4858.com 7

@escaping

  • 那个是本人在适配中最蛋疼的坑
  • 先是在看swift-evolution只是探听到@escaping
    必须出示证明。可是不领悟@escaping的闭包,在函数体内无法再修改。

4858.com 8

Date &&
NSDate

  • 因为有个项目中央银行使的
    DateTools 这一个工具。它有二个 NSDate + Tools 的分类。
  • 然则在写 斯维夫特 三的经过中自己开掘只要变量是 Date 类型的不恐怕使用NSDate + Tools
    这么些类别,必须出示申明 date as NSDate
    那样才干调用分类的1对个主意。
  • 本条让动用 OC
    的库的时候会深感13分不爽快,究竟好多 NS
    的前缀去掉了。全体都显得证明太不祥和了。

CAAnimationDelegate

  • 其一实在看似是
    Xcode 8 的退换。因为事先CAAnimationDelegate
    是二个分类。差不多评释如下:

4858.com 9

  • 后边是在 vc
    中一经重写一下 animationDidStart
    函数就足以了。不过新的不胜,初叶以为是 斯威夫特 三 的扭转,可是实际上是
    Xcode 八 中的修改。将 CAAnimationDelegate
    产生了三个共谋。笔者感到那么些修改是为着适配 Swift 三 ?变化如下:

4858.com 10

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

知识储备晋级

  • 先驾驭了一下Swift 二 到 斯维夫特 三的改造,及退换的缘故。(看完心中一万头草泥马飞过,不过实际是更为好了)

    • Swift官博

    • swift-evolution

    • 斯维夫特 3新特点1览

  • 下一场把语法文书档案赶快的陈年老辞了三遍。

    • Swift Programming Language

    • 中文版

搬迁中的难点

其他

还有众多神秘的转移让您就好像看不懂那些语言了,所以建议在适配以前看一下底下的稿子。

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

还有多少个科学的总括

  • Swift 3by顾
    鹏:
  • 适配 Swift 3的一点小经验和坑by图拉鼎:

其他

再有为数不少神秘的变型让你好似看不懂那个语言了,所以提议在适配此前看一下上边包车型客车稿子。

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

还有多少个科学的计算

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

搬迁中的难题

Any && AnyObject

  • 本身想在做动员搬迁和做完迁移的校友改的最多的二个正是  as AnyObjct? 吧?

  • 最少对于本身来便是的。

  • 和这几个相关的为主是集合类型。在 斯维夫特 第22中学我们叁个用 [AnyObject] 来存废弃何变量,乃至于存放struct类型的StringArray 等。不过按道理
    Swift的 AnyObject 指的是类,而 Any 才是总结structclassfunc 等全数项目。可是怎么 Struct 能够放入 [AnyObject] 呢?在
     Swift 2 的时候会针对StringInt 等 Struct 实行3个Implicit Bridging Conversions。而到了 Swift
    3
     则进行了一个**Fully eliminate implicit bridging conversions
    from
    Swift**改动。

  • 自然在本身的门类中[AnyObject]实际上是小事,最麻烦的就是
    [String:AnyObject]。因为那儿写项目标时候,仍然处于 OC To
    Swift
     的品级所以对于 Dictionary ,基本使用了 [String:AnyObject],
    所以在改造的时候,在许多地方为了这么些修改。

    • 发端,小编是照着 Xcode 的升迁,在 Dictionary 前面包车型地铁 value
      前面加了一个 as AnyObjct?

    • 后来稳步的意识自个儿做了1件很傻比的业务,其实小编只要把
      [String:AnyObject] 改为 [String:Any] 就能够了。????

  • 这也正是为何在第贰混编的项目中自身花了那么多时间去修改代码了!得益于混编的第壹个种类学习了
    Yep
    的笔触,是把 [String:AnyObject] 命名叫一个叫做 JSONDictionary 的类型。所以在 Any
    && AnyObect
     那么些业务上,就花了一小点时光。

// Swift 2
 var json = [String:AnyObect]()
json["key1"] = 1 
json["key2"] = "2" 

// to Swift 3 Step 1
 var json = [String:AnyObect]()
json["key1"] = 1 as AnyObject?
json["key2"] = "2" as AnyObject?

// to Swift 3 Step 2
 var json = [String:Any]()
json["key1"] = 1 
json["key2"] = "2"

// Swift 2 
public typealias JSONDictionary = [String: AnyObject]
// To Swift 3 Step 2
public typealias JSONDictionary = [String: Any]

总结

  • 总的说来此次迁徙未有设想中的那么忧伤,纵然提案的转移非常的大,可是得益于
    Xcode 8的搬迁工具,本次迁徙费用时间不多,当然也有希望和小编的代码量有提到~
  • 在搬迁完之后,再看代码,会开采Swift 尤其的幽雅了,至少相比较于 2来讲好了重重,至于幸而哪个地方?你和谐写写不就精晓了咯。
  • 末段,终于得以把
    Xocde 七 卸载,再也不用挂念五个同步开无脑闪退了!!!
  • 最后对于度岁的
    Swift 四 只想说 快来啊~分分钟把您解决!
  • 其实适配之路才刚刚起始,因为
    Xcode 八 自动转的代码并不曾很好的 斯维夫特 叁 化。近来只是说在 Swift 3能够编译通过了而已~

总结

  • 一句话来说此次迁徙没有设想中的那么难熬,尽管提案的改换异常的大,不过得益于
    Xcode 8的搬迁工具,本次迁徙开销时间不多,当然也有十分大希望和本身的代码量有涉及~
  • 在搬迁完今后,再看代码,会发现Swift 特别的古雅了,至少比较于 2来讲好了重重,至于幸好哪儿?你本人写写不就理解了咯。
  • 最后,终于得以把
    Xocde 7 卸载,再也不用顾虑多少个一同开无脑闪退了!!!
  • 最后对于度岁的
    斯威夫特 四 只想说 快来啊~分分钟把您消除!
  • 实则适配之路才刚刚开头,因为
    Xcode 8 自动转的代码并从未很好的 Swift 3 化。目前只是说在 Swift 3能够编写翻译通过了而已~

Any && AnyObject

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

  • 至少对于本人来正是的。

  • 和这几个相关的宗旨是会晤类型。在 Swift 第22中学大家三个用 [AnyObject] 来存放任何变量,以至于存放struct类型的StringArray 等。然则按道理
    斯威夫特的 AnyObject 指的是类,而 Any 才是回顾structclassfunc 等全部品种。可是怎么 Struct 能够放入 [AnyObject] 呢?在
     Swift 2 的时候会针对StringInt 等 Struct 实行一个Implicit Bridging Conversions。而到了 Swift
    3
     则进行了3个**Fully eliminate implicit bridging conversions
    from
    Swift**改动。

  • 4858.com ,当然在本身的品类中[AnyObject]实际是细节,最麻烦的正是
    [String:AnyObject]。因为当时写项目的时候,依然处于 OC To
    Swift
     的级差所以对于 Dictionary ,基本使用了 [String:AnyObject],
    所以在修改的时候,在多数地点为了这一个修改。

    • 起先,笔者是照着 Xcode 的唤起,在 Dictionary 前面的 value
      前面加了1个 as AnyObjct?

    • 后来逐步的意识作者做了一件很傻比的作业,其实作者要是把
      [String:AnyObject] 改为 [String:Any] 就可以了。????

  • 那也正是干吗在首先混编的门类中本身花了那么多日子去修改代码了!得益于混编的第四个种类学习了
    Yep
    的思路,是把 [String:AnyObject] 命名字为二个叫做 JSONDictionary 的类型。所以在 Any
    && AnyObect
     这些业务上,就花了一小点时光。

// Swift 2
 var json = [String:AnyObect]()
json["key1"] = 1 
json["key2"] = "2" 

// to Swift 3 Step 1
 var json = [String:AnyObect]()
json["key1"] = 1 as AnyObject?
json["key2"] = "2" as AnyObject?

// to Swift 3 Step 2
 var json = [String:Any]()
json["key1"] = 1 
json["key2"] = "2"

// Swift 2 
public typealias JSONDictionary = [String: AnyObject]
// To Swift 3 Step 2
public typealias JSONDictionary = [String: Any]

Alamofire 等叁方库帮忙 iOS捌

  • 虽说说自家利用的叁方库都在第临时间将库晋级到了 Swift
    3
     ,然则期中 Alamofire 和 Snap 五个库最低适配只帮助到了
    iOS
    九,为了幸免和制品撕逼,不得不想艺术减轻那一个适配难点。上边以 Alamofire  为例

  • 其实叁方库么,不自然只用 Cocoapods
    的。所以准备下载代码然后直接撸源码。

  • Alamofire的 Xcode 修改为最低适配
    八.0,然后编写翻译查找不经过的函数,并删除。(其实这么些函数都是 iOS 玖新加的函数,所以删除不影响什么。)

  • 大概花了 半个小时左右就足以删完了,然后直接拖到项目中就能够了~

  • Snap 其实如若拖进去就好了,权且不须求修改什么。

// 其实都是 !os(watchOS) 这个宏下面的
#if !os(watchOS)

@discardableResult
public func stream(withHostName hostName: String, port: Int) -> StreamRequest {
    return SessionManager.default.stream(withHostName: hostName, port: port)
}

@discardableResult
public func stream(with netService: NetService) -> StreamRequest {
    return SessionManager.default.stream(with: netService)
}

#endif

更多

办事之余,写了点笔记,假设急需能够在本人的GitHub看。

本文作者:Damonwong
小说链接:

更多

工作之余,写了点笔记,假设须要能够在本身的 GitHub 看。

 

正文小编:Damonwong(@王浙剑)
 小说链接:

Alamofire 等3方库协理 iOS8

  • 虽说说本身使用的叁方库都在第暂时间将库进级到了 Swift
    3
     ,可是期中 Alamofire 和 Snap 多少个库最低适配只帮衬到了
    iOS
    玖,为了制止和成品撕逼,不得不想办法消除这一个适配难题。上面以 Alamofire  为例

  • 实质上3方库么,不分明只用 Cocoapods
    的。所以盘算下载代码然后直接撸源码。

  • Alamofire的 Xcode 修改为压低适配
    8.0,然后编写翻译查找不经过的函数,并剔除。(其实那一个函数都以 iOS 9新加的函数,所以删除不影响怎么样。)

  • 粗粗花了 半个钟头左右就足以删完了,然后直接拖到项目中就能够了~

  • Snap 其实假设拖进去就好了,一时不须要修改什么。

// 其实都是 !os(watchOS) 这个宏下面的
#if !os(watchOS)

@discardableResult
public func stream(withHostName hostName: String, port: Int) -> StreamRequest {
    return SessionManager.default.stream(withHostName: hostName, port: port)
}

@discardableResult
public func stream(with netService: NetService) -> StreamRequest {
    return SessionManager.default.stream(with: netService)
}

#endif

@escaping

  • 其壹是自家在适配中最蛋疼的坑

  • 先是在看swift-evolution只是询问到@escaping 必须出示证明。不过不晓得@escaping的闭包,在函数体内不大概再修改。

let pedonmeter:CMPedometer = CMPedometer()

    func getPedometerDataFromDate(_ datet:Date?, withHandler handler: @escaping (CMPedometerData?, Error?) -> ()){


        // 编译错误
        pedonmeter.queryPedometerDataFromDate(startTime, toDate:endTime, withHandler: { (pedometerData:CMPedometerData?, error:NSError?) -> Void in

            guard let pedometerData = pedometerData else { return }
            handler(pedometerData, error)

            // 做一些事情

        })
        // 最后逼不得已只能不修改了,函数外面就做一些事情了
        pedonmeter.queryPedometerData(from: startTime, to: endTime, withHandler:  handler as! CMPedometerHandler)

    }

@escaping

  • 那些是本人在适配中最蛋疼的坑

  • 先是在看swift-evolution只是探听到@escaping 必须出示注脚。可是不知道@escaping的闭包,在函数体内不可能再修改。

let pedonmeter:CMPedometer = CMPedometer()

    func getPedometerDataFromDate(_ datet:Date?, withHandler handler: @escaping (CMPedometerData?, Error?) -> ()){


        // 编译错误
        pedonmeter.queryPedometerDataFromDate(startTime, toDate:endTime, withHandler: { (pedometerData:CMPedometerData?, error:NSError?) -> Void in

            guard let pedometerData = pedometerData else { return }
            handler(pedometerData, error)

            // 做一些事情

        })
        // 最后逼不得已只能不修改了,函数外面就做一些事情了
        pedonmeter.queryPedometerData(from: startTime, to: endTime, withHandler:  handler as! CMPedometerHandler)

    }

Result of call to ‘funtion’ is unused

  • 那实质上不是一个编写翻译错误,可是那一个警示最初叶让作者有点懵逼.再次来到值不用难道要自身都修改一下?

  • 最初阶实际笔者是那样修改的 let _ = funtion(),然则后边在看SE-0047的时候开掘@discardableResult也是能够直达这些效应的。

Result of call to ‘funtion’ is unused

  • 那实则不是一个编写翻译错误,不过这几个警示最初叶让自身有点懵逼.再次来到值不用难道要本身都修改一下?

  • 最开首实际笔者是这么修改的 let _ = funtion(),可是后边在看SE-0047的时候发现@discardableResult也是足以高达那一个职能的。

Date && NSDate

  • 因为有个门类中央银行使的 DateTools 那么些工具。它有八个 NSDate +
    Tools
     的分类。

  • 可是在写 Swift 三 的经过中自己发觉只要变量是 Date
    类型的力不从心选择NSDate + Tools 那一个类型,必须出示评释date as
    NSDate
     那样才干调用分类的有个别个章程。

  • 其一让使用 OC 的库的时候会以为相当不痛快,终究繁多 NS
    的前缀去掉了。所有都展现证明太不团结了。

Date && NSDate

  • 因为有个门类中运用的 DateTools 这一个工具。它有1个 NSDate +
    Tools
     的分类。

  • 而是在写 斯威夫特 三 的进度中本人发觉只要变量是 Date
    类型的力不从心接纳NSDate + Tools 那些类型,必须出示注脚date as
    NSDate
     那样才能调用分类的有个别个法子。

  • 以此让动用 OC 的库的时候会以为越发不痛快,究竟繁多 NS
    的前缀去掉了。全数都显得申明太不和谐了。

CAAnimationDelegate

  • 以此实际类似是 Xcode 八 的退换。因为前边CAAnimationDelegate
    是七个分拣。大概申明如下:

@interface NSObject (CAAnimationDelegate)- (void)animationDidStart:(CAAnimation *)anim;
- 
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;@end
  • 前边是在 vc
    中假设重写一下 animationDidStart 函数就足以了。然而新的拾分,起首感到是
    Swift 3 的变动,不过实际上是 Xcode 八 中的修改。将 CAAnimationDelegate
    产生了七个批评。小编备感那个修改是为着适配   Swift 三 ?变化如下:

@protocol CAAnimationDelegate @optional- (void)animationDidStart:(CAAnimation *)anim;
- 
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;@end

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

CAAnimationDelegate

  • 以此实际看似是 Xcode 八 的退换。因为前边CAAnimationDelegate
    是三个分类。大概注明如下:

@interface NSObject (CAAnimationDelegate)- (void)animationDidStart:(CAAnimation *)anim;
- 
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;@end
  • 前边是在 vc
    中即使重写一下 animationDidStart 函数就足以了。不过新的不得了,初始感到是
    Swift 3 的变化,不过实际上是 Xcode 八 中的修改。将 CAAnimationDelegate
    产生了二个体协会议。我感到这些修改是为着适配   Swift 3 ?变化如下:

@protocol CAAnimationDelegate @optional- (void)animationDidStart:(CAAnimation *)anim;
- 
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;@end

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

其他

  • 再有众多神秘的成形让你如同看不懂这么些语言了,所以建议在适配以前看一下上面包车型大巴篇章。

    • 斯维夫特 3新特色1览

    • [Swift 3.0 – Released on September 13,
      2016]

    • 还有@卓同学 的 斯威夫特 3不可不看连串

  • 再有几个不利的计算

    • Swift 3 by 顾

    • 适配 斯维夫特 三的一点小经验和坑 by 图拉鼎

其他

  • 再有为数不少神秘的调换让你好似看不懂这几个语言了,所以提议在适配以前看一下底下的稿子。

    • Swift 三新特性1览

    • [Swift 3.0 – Released on September 13,
      2016]

    • 还有@卓同学 的 Swift 3一定要看体系

  • 还有多少个不利的下结论

    • Swift 3 by 顾

    • 适配 Swift 三的一点小经验和坑 by 图拉鼎

总结

  • 总来讲之本次迁徙没有设想中的那么难熬,即便提案的改造比较大,可是得益于
    Xcode 8的动员搬迁工具,此番迁徙费用时间不多,当然也有十分大恐怕和本人的代码量有提到~

  • 在搬迁完今后,再看代码,会开掘 斯威夫特 尤其的优雅了,至少比较于 2来讲好了广大,至于幸而哪里?你自身写写不就理解了咯。

  • 终极,终于得以把 Xocde 柒卸载,再也不用担忧多个同步开无脑闪退了!!!

  • 最终对于过大年的 Swift 4 只想说 快来吧~分分钟把您化解!

  • 其实适配之路才刚刚起初,因为 Xcode 八 自动转的代码并不曾很好的 Swift三 化。近年来只是说在 Swift 三 能够编写翻译通过了而已~

总结

  • 总的说来此番迁徙未有想像中的那么忧伤,即便提案的退换相当的大,可是得益于
    Xcode 8的搬迁工具,此番迁徙费用时间不多,当然也有比非常大只怕和自身的代码量有提到~

  • 在搬迁完未来,再看代码,会开掘 Swift 特别的优雅了,至少相比较于 2来讲好了很多,至于幸好哪个地方?你和煦写写不就知晓了咯。

  • 末段,终于得以把 Xocde 7卸载,再也不用顾虑七个同步开无脑闪退了!!!

  • 最后对于过大年的 Swift 4 只想说 快来吧~分分钟把你解决!

  • 实质上适配之路才刚刚早先,因为 Xcode 捌 自动转的代码并从未很好的 Swift三 化。近日只是说在 斯威夫特 叁 能够编写翻译通过了而已~

更多

做事之余,写了点笔记,若是须要能够在本身的 GitHub 看

小说转自 Damonwong的简书

 

别的值得参考文献收藏:

官方:

更多

工作之余,写了点笔记,若是供给能够在本身的 GitHub 看

小说转自 Damonwong的简书

 

别的值得参考文献收藏:

官方:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有