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

写在前面

  • Swift 3.0 正式版公布了诸多快三个月了,断断续续的把手上和 Swift相关的迁徙到了斯维夫特 叁.0。所以写点小总计。

写在前边

  • 斯威夫特 3.0
    正式版发表了大概快四个月了,断断续续的把手上和 Swift相关的搬迁到了Swift 3.0。所以写点小总计。

写在前头

  • 斯维夫特 三.0
    正式版公布了大半快3个月了,断断续续的把手上和 Swift相关的迁徙到了Swift 三.0。所以写点小计算。

写在前头

  • Swift 三.0 正式版公布了差不离快二个月了,断断续续的把手上和 Swift相关的迁移到了Swift 叁.0。所以写点小总计。

背景

背景

背景

背景

代码量(4万行)

  • 率先,笔者是现年开春才起来出手 Swift 的。加上 Swift 的 ABI 和 API
    一直动荡,所以并未有在等级次序中山高校范围的接纳,所以这一次迁徙的代码量不多,大约在4万行左右。

代码量(4万行)

  • 率先,笔者是当年开春才起来入手斯维夫特 的。加上 斯维夫特 的 ABI 和 API
    一贯不安定,所以并未有在等级次序中山高校范围的采纳,所以本次迁徙的代码量不多,差不离在肆万行左右。

代码量(4万行)

  • 率先,作者是今年新禧才开头动手Swift 的。加上 斯威夫特 的 ABI 和 API
    一贯不平稳,所以并未有在等级次序中山高校范围的使用,所以这一次迁徙的代码量不多,差不离在肆万行左右。

代码量(4万行)

  • 率先,作者是今年新禧才初步起始 斯威夫特 的。加上 Swift 的 ABI 和 API
    向来不稳固,所以未有在类型中大范围的使用,所以此番迁徙的代码量不多,大致在4万行左右。

搬迁时间(壹天左右)

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

搬迁时间

  • 搬迁时间上的话,大致是花了1天左右。三个混编项目,二个斯威夫特 为主的品类。期中 Swift 为主的品类
    花了大致大半天日子,八个混编代码量大约,不过多个花了小半天,还有贰个基本上只花了半个钟头。

搬迁时间(1天左右)

  • 搬迁时间上的话,差不多是花了壹天左右。多个混编项目,一个Swift 为主的项目。期中 斯威夫特 为主的品种草了大概大半天年华,两个混编代码量差不离,可是多个花了小半天,还有二个几近只花了半个钟头(原因先留个悬念~)。

搬迁时间(一天左右)

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

准备

在支付最初开垦采用 Swift 的时候的广大裁决也让小编这一次少了不少专业量。

准备

在付出最初开荒采用 Swift的时候的洋洋决策也让笔者本次少了无数专门的学问量。

分界面用 xib 而不用纯代码

  • 阴差阳错的,和 Swift相关的大多数界面都以用xib 画的。而以此 xib
    在这一次迁徙中获取了十分大的优势,xib 和 SB 的代码不适配 Swift三。想当初即便选择代码写的 UI
    的话,此次迁徙更换猜测会多广大吧。

有关第三方库的精选:

  • 对于三个体系来讲,三方库就像成了1道必选菜,可是如何去选取这道菜呢?
  • 对此叁方库,当初的挑选是,能用 OC
    就玩命用 OC。 终归能够OC 能够无缝衔接到
    斯威夫特,而且还针锋相对稳固性。
  • 在挑选 斯威夫特相关的3方库时,作者尽量值选拔使用者相比多的库,比如Alamofire、Snap、Kingfisher、法布里c
    等,因为使用者相比多,开采者会更愿意去维护,而不至于跳票。所以不会设有以后游人如织伙伴面临的标题,想迁移,但是有个别库未有立异。至少对于本身的话,当本人想迁移的时候,全部和
    斯威夫特 相关的三方库都曾经搬迁到了 三.0 了。

得益于下边两点,在搬迁进程中少了重重工作量。

准备

在支付最初开荒采取 Swift的时候的成都百货上千表决也让自个儿本次少了不少工作量。

分界面用 xib 而不用纯代码

  • 阴差阳错的,和 斯维夫特相关的绝大多数分界面都以用xib 画的。而那么些 xib
    在本次迁徙中赢得了相当大的优势,xib 和 SB 的代码不适配 Swift3。想当初如若运用代码写的 UI
    的话,这一次迁徙退换推测会多众多呢。

关于第三方库的抉择:

  • 对此三个等级次序以来,三方库就像成了1道必选菜,不过什么去挑选这道菜呢?
  • 对于三方库,当初的选取是,能用 OC
    就尽只怕用 OC。 究竟可以OC 能够无缝衔接到
    斯威夫特,而且还相对牢固。
  • 在甄选 斯威夫特相关的叁方库时,笔者尽可能值选取使用者相比多的库,举个例子Alamofire、Snap、Kingfisher、法布里c
    等,因为使用者比较多,开垦者会更乐于去珍视,而不致于跳票。所以不会存在将来无数同伙面临的主题材料,想迁移,不过有个别库未有更新。至少对于本人的话,当作者想迁移的时候,全体和
    斯威夫特 相关的叁方库都已经搬迁到了 三.0 了。

得益于上边两点,在搬迁进度中少了诸多工作量。

准备

在开垦最初开辟选取 Swift 的时候的累累核定也让自家本次少了重重专门的工作量。

分界面用 xib 而不用纯代码

  • 阴差阳错的,和 Swift 相关的多数分界面都是用xib 画的。而以此 xib
    在本次迁徙中取得了非常的大的优势,xib 和 SB 的代码不适配 斯维夫特3。想当初若是利用代码写的 UI 的话,本次迁徙退换估摸会多过多吗。

知识储备晋级

先理解了瞬间斯威夫特 二 到 斯威夫特 三的改观,及改动的原由。(看完心中20000头草泥马飞过,然则事实上是更为好了)

  • Swift官博:
  • swift-evolution:
  • Swift 三新特色1览:

下一场把语法文书档案火速的1再了三回。

  • Swift Programming
    Language:
  • 中文版:

文化储备晋级

先精晓了眨眼间间Swift 贰 到 斯威夫特 3的变动,及改换的缘由。(看完心中20000头草泥马飞过,可是其实是尤为好了)

  • Swift官博:
  • swift-evolution:
  • Swift 3新特色1览:

下一场把语法文书档案急忙的反复了3回。

  • Swift Programming
    Language:
  • 中文版:

分界面用 xib 而不用纯代码

  • 阴差阳错的,和 斯维夫特 相关的大多数分界面都以用xib 画的。而以此 xib
    在此次迁徙中得到了相当大的优势,xib 和 SB 的代码不适配 Swift三。想当初若是选用代码写的 UI 的话,本次迁徙改造测度会多广大呢。

至于第一方库的挑叁拣四:

  • 对于三个品类来讲,3方库如同成了1道必选菜,不过如何去接纳那道菜呢?

  • 对此3方库,当初的取舍是,能用 OC 就玩命用 OC。 毕竟能够OC
    能够无缝衔接到 Swift,而且还针锋相对安静。

  • 在选择 Swift 相关的三方库时,笔者竭尽值选取使用者比较多的库,比方AlamofireSnapKingfisherFabric等,因为使用者相比较多,开拓者会更愿意去维护,而不至于跳票。所以不会设有未来无尽同伴面临的主题素材,想迁移,可是有些库没有立异。至少对于小编的话,当本人想迁移的时候,全体和
    Swift 相关的三方库都早就搬迁到了 三.0 了。

得益于上边两点,在搬迁进程中少了过多职业量。????

搬迁中的难点

搬迁中的难题

有关第二方库的选项:

  • 对此一个系列来讲,三方库就像成了壹道必选菜,可是什么去选取那道菜呢?

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

  • 在选择 Swift 相关的叁方库时,笔者尽量值选取使用者相比较多的库,比如AlamofireSnapKingfisherFabric等,因为使用者比较多,开采者会更愿意去保养,而不至于跳票。所以不会设有今后无数伙伴面临的难点,想迁移,可是有个别库未有创新。至少对于自身的话,当自身想迁移的时候,全体和
    斯威夫特 相关的3方库都曾经搬迁到了 三.0 了。

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

知识储备晋级

  • 先掌握了一下Swift 二 到 斯维夫特 三的更换,及更改的原委。(看完心中10000头草泥马飞过,可是实际是尤为好了)

    • Swift官博

    • swift-evolution

    • Swift 叁新特征一览

  • 接下来把语法文书档案火速的陈年老辞了一回。

    • Swift Programming Language

    • 中文版

Any && AnyObject

自个儿想在做动迁和做完迁移的校友改的最多的七个正是as
AnyObjct?吧?

最少对于作者来正是的。

和那个相关的为主是汇聚类型。在 斯威夫特 第22中学大家三个用[AnyObject]来存放任何变量,以至于存放struct类型的String、Array等。可是按道理
Swift的AnyObject指的是类,而Any才是包罗struct、class、func等具备项目。可是怎么Struct能够放入[AnyObject]啊?在Swift二的时候会指向String、Int等Struct举行一个 Implicit Bridging
Conversions。而到了斯维夫特 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] 就足以了。

那也正是怎么在率先混编的品类中本人花了那么多时光去修改代码了!得益于混编的第壹个门类学习了
Yep
的思绪,是把[String:AnyObject]命名称叫3个名为JSONDictionary的花色。所以在Any
&& AnyObect那些事情上,就花了一小点时间。

澳门葡京备用网址 1

Alamofire 等3方库支持 iOS八

  • 搬迁工作总计,新特点和迁移详解。即便说自个儿利用的三方库都在第临时间将库升级到了
    Swift 叁 ,不过期中 Alamofire 和 Snap 五个库最低适配只帮衬到了 iOS
    玖,为了幸免和产品撕逼,不得不想办法消除那些适配难点。上边以
    Alamofire 为例
  • 其实三方库么,不确定只用 Cocoapods
    的。所以计划下载代码然后径直撸源码。
  • 先Alamofire的 Xcode 修改为最低适配
    八.0,然后编写翻译查找不通过的函数,并删除。(其实这几个函数都以 iOS 九新加的函数,所以删除不影响什么。)
  • 大概花了
    半个钟头左右就能够删完了,然后直接拖到项目中就足以了~
  • Snap
    其实只要拖进去就好了,临时不供给修改什么。

澳门葡京备用网址 2

@escaping

  • 以此是自个儿在适配中最蛋疼的坑
  • 率先在看swift-evolution只是摸底到@escaping
    必须出示证明。不过不知底@escaping的闭包,在函数体内不可能再修改。

澳门葡京备用网址 3

Date &&
NSDate

  • 因为有个品类中利用的
    DateTools 那个工具。它有1个 NSDate + Tools 的归类。
  • 但是在写 Swift 3的经过中本身开掘只要变量是 Date 类型的不能利用NSDate + Tools
    那一个项目,必须出示阐明 date as NSDate
    那样手艺调用分类的有的个点子。
  • 以此让使用 OC
    的库的时候会认为到那多少个不痛快,终归繁多 NS
    的前缀去掉了。全体都显示申明太不友好了。

CAAnimationDelegate

  • 本条实际上看似是
    Xcode 八 的修改。因为事先CAAnimationDelegate
    是一个分拣。大约表明如下:

澳门葡京备用网址 4

  • 以前是在 vc
    中倘若重写一下 animationDidStart
    函数就能够了。可是新的十分,早先以为是 Swift 三 的变化,可是其实是
    Xcode 八 中的修改。将 CAAnimationDelegate
    造成了1个体协会谈商讨。笔者深感那个修改是为着适配 Swift 3 ?变化如下:

澳门葡京备用网址 5

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

Any && AnyObject

自己想在做动员搬迁和做完迁移的同校改的最多的1个正是 as
AnyObjct? 吧?

最少对于自己来正是的。

和这几个相关的主导是聚众类型。在 Swift 第22中学大家2个用 [AnyObject] 来存放弃何变量,以致于存放struct类型的 String、Array 等。但是按道理
Swift的 AnyObject 指的是类,而 Any 才是包涵struct、class、func 等全体品类。可是怎么 Struct 可以放入 [AnyObject] 呢?在 斯威夫特二 的时候会指向String、Int 等 Struct 进行3个 Implicit Bridging
Conversions。而到了 Swift 叁 则开始展览了叁个**Fully eliminate implicit
bridging conversions from Swift**改动。

本来在自家的花色中[AnyObject]实质上是细节,最劳顿的便是
[String:AnyObject]。因为那时写项目标时候,依然处于 OC To
斯威夫特 的级差所以对于 Dictionary ,基本使用了 [String:AnyObject],
所以在修改的时候,在不少地点为了那些修改。

  • 发端,小编是照着 Xcode 的提拔,在
    Dictionary 前面包车型客车 value 前边加了贰个 as AnyObjct?
  • 新生稳步的开掘自家做了一件很傻比的业务,其实本身一旦把
    [String:AnyObject] 改为 [String:Any] 就能够了。

这也便是为啥在率先混编的项目中笔者花了那么多时光去修改代码了!得益于混编的第2个品种学习了
Yep
的思绪,是把 [String:AnyObject] 命名叫3个叫作 JSONDictionary 的体系。所以在 Any
&& AnyObect 这么些事情上,就花了一小点日子。

澳门葡京备用网址 6

Alamofire 等三方库帮助 iOS8

  • 虽说说自个儿使用的三方库都在第一时间将库升级到了
    斯威夫特 三 ,然则期中 Alamofire 和 Snap 五个库最低适配只援救到了 iOS
    玖,为了幸免和产品撕逼,不得不想办法消除那些适配难题。上面以
    Alamofire 为例
  • 实则三方库么,不料定只用 Cocoapods
    的。所以准备下载代码然后间接撸源码。
  • 先Alamofire的 Xcode 修改为压低适配
    八.0,然后编写翻译查找不经过的函数,并剔除。(其实这几个函数都是 iOS 九新加的函数,所以删除不影响怎样。)
  • 大意花了
    半个小时左右就能够删完了,然后径直拖到项目中就足以了~
  • Snap
    其实如若拖进去就好了,目前不需求修改什么。

澳门葡京备用网址 7

@escaping

  • 本条是本人在适配中最蛋疼的坑
  • 第1在看swift-evolution只是摸底到@escaping
    必须出示评释。可是不知情@escaping的闭包,在函数体内不可能再修改。

澳门葡京备用网址 8

Date &&
NSDate

  • 因为有个类型中选择的
    DateTools 那一个工具。它有1个 NSDate + Tools 的分类。
  • 唯独在写 斯威夫特 3的进程中本人发掘只要变量是 Date 类型的一筹莫展运用NSDate + Tools
    这些项目,必须出示阐明 date as NSDate
    那样工夫调用分类的局部个措施。
  • 本条让动用 OC
    的库的时候会感到尤其不舒适,究竟许多 NS
    的前缀去掉了。全数都显得注明太不和煦了。

CAAnimationDelegate

  • 这么些其实看似是
    Xcode 捌 的改造。因为以前CAAnimationDelegate
    是一个分类。大概证明如下:

澳门葡京备用网址 9

  • 事先是在 vc
    中假若重写一下 animationDidStart
    函数就足以了。可是新的相当,先导以为是 Swift 三 的成形,但是实际是
    Xcode 八 中的修改。将 CAAnimationDelegate
    造成了三个说道。笔者备感那么些修改是为了适配 斯威夫特 3 ?变化如下:

澳门葡京备用网址 10

因为宽度时间相比长,别的的一时半刻想不到了。未完待续吧…

文化储备进级

  • 先领会了弹指间斯维夫特 二 到 Swift 三的更动,及改动的来头。(看完心中30000头草泥马飞过,可是事实上是尤为好了)

    • Swift官博

    • swift-evolution

    • Swift 叁新特点壹览

  • 下一场把语法文书档案快捷的再3了一回。

    • Swift Programming Language

    • 中文版

搬迁中的难点

其他

再有诸多神奇的生成让您就像是看不懂这些语言了,所以建议在适配在此以前看一下底下的稿子。

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

还有多少个科学的总计

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

其他

再有多数神奇的成形让你好似看不懂那么些语言了,所以提出在适配以前看一下下边包车型客车稿子。

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

再有多少个不错的下结论

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

搬迁中的难点

Any && AnyObject

  • 自己想在做动员搬迁和做完迁移的同校改的最多的四个正是  as AnyObjct? 吧?

  • 足足对于笔者来便是的。

  • 和这么些相关的中坚是汇集类型。在 Swift 2中大家3个用 [AnyObject] 来存抛弃何变量,乃至于存放struct类型的StringArray 等。不过按道理
    Swift的 AnyObject 指的是类,而 Any 才是总结structclassfunc 等全部品类。然而怎么 Struct 能够放入 [AnyObject] 呢?在
     Swift 2 的时候会指向StringInt 等 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
      后边加了二个 as AnyObjct?

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

  • 这也正是为何在首先混编的花色中自个儿花了那么多日子去修改代码了!得益于混编的第三个类型学习了
    Yep
    的思路,是把 [String:AnyObject] 命名字为1个叫做 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 八的搬迁工具,此次迁徙开销时间不多,当然也有希望和自家的代码量有涉及~
  • 在搬迁完之后,再看代码,会发掘斯维夫特 尤其的古雅了,至少相比较于 二来讲好了不少,至于幸而哪个地方?你和谐写写不就知晓了咯。
  • 聊起底,终于能够把
    Xocde 7 卸载,再也不用忧虑八个壹块开无脑闪退了!!!
  • 最终对于过大年的
    斯威夫特 4 只想说 快来啊~分秒钟把您消除!
  • 实际上适配之路才刚刚早先,因为
    Xcode 八 自动转的代码并未很好的 斯威夫特 三 化。方今只是说在 Swift 3能够编译通过了而已~

总结

  • 简单来讲这一次迁徙未有想象中的那么忧伤,就算提案的变动非常的大,不过得益于
    Xcode 八的迁移工具,这一次迁徙开支时间不多,当然也有望和自身的代码量有涉及~
  • 在搬迁完之后,再看代码,会意识
    斯维夫特 特别的优雅了,至少比较于 二来讲好了广大,至于还好何地?你本身写写不就清楚了咯。
  • 最终,终于得以把
    Xocde 7 卸载,再也不用怀想四个共同开无脑闪退了!!!
  • 澳门葡京备用网址 ,终极对于过大年的
    斯威夫特 4 只想说 快来呢~分分钟把您消除!
  • 实在适配之路才刚刚起初,因为
    Xcode 8 自动转的代码并未有很好的 斯维夫特 三 化。近日只是说在 斯维夫特 3可以编写翻译通过了而已~

Any && AnyObject

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

  • 足足对于作者来就是的。

  • 和那几个相关的主导是聚拢类型。在 斯威夫特 2中大家2个用 [AnyObject] 来存放弃何变量,乃至于存放struct类型的StringArray 等。然则按道理
    Swift的 AnyObject 指的是类,而 Any 才是归纳structclassfunc 等全数品种。可是怎么 Struct 能够放入 [AnyObject] 呢?在
     Swift 2 的时候会针对StringInt 等 Struct 举办一个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] 就足以了。????

  • 那约等于怎么在率先混编的门类中作者花了那么多时光去修改代码了!得益于混编的第1个档案的次序学习了
    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  为例

  • 实际3方库么,不必然只用 Cocoapods
    的。所以筹算下载代码然后径直撸源码。

  • Alamofire的 Xcode 修改为压低适配
    8.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 等叁方库支持 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

@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 的库的时候会感到到1贰分不好受,毕竟多数 NS
    的前缀去掉了。全部都来得注明太不协和了。

Date && NSDate

  • 因为有个项目中央银行使的 DateTools 这一个工具。它有一个 NSDate +
    Tools
     的分类。

  • 只是在写 Swift 3 的进度中本身意识只要变量是 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 三 的转移,不过事实上是 Xcode 八 中的修改。将 CAAnimationDelegate
    造成了1个商议。笔者认为那一个修改是为着适配   Swift 三 ?变化如下:

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

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

CAAnimationDelegate

  • 那一个其实类似是 Xcode 八 的修改。因为在此以前CAAnimationDelegate
    是2个分拣。大概评释如下:

@interface NSObject (CAAnimationDelegate)- (void)animationDidStart:(CAAnimation *)anim;
- 
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;@end
  • 事先是在 vc
    中只要重写一下 animationDidStart 函数就能够了。然而新的13分,早先认为是
    斯维夫特 3 的改动,不过实际上是 Xcode 八 中的修改。将 CAAnimationDelegate
    形成了四个磋商。小编倍感那一个修改是为着适配   斯维夫特 3 ?变化如下:

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

因为宽度时间相比较长,别的的一时半刻想不到了。未完待续吧…

其他

  • 再有多数微妙的变化让你好似看不懂这些语言了,所以提议在适配在此以前看一下底下的篇章。

    • Swift 三新特征一览

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

    • 还有@卓同学 的 斯维夫特 3非看不可类别

  • 还有多少个正确的总括

    • Swift 3 by 顾

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

其他

  • 再有好些个微妙的转变让你好似看不懂那些语言了,所以建议在适配从前看一下下边包车型客车小说。

    • 斯威夫特 三新脾气一览

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

    • 还有@卓同学 的 Swift 三非看不可体系

  • 还有多少个科学的总结

    • Swift 3 by 顾

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

总结

  • 简单来讲本次迁徙未有设想中的那么痛心,尽管提案的转移一点都不小,但是得益于
    Xcode 8的搬迁工具,此次迁徙花费时间不多,当然也有十分大可能率和自己的代码量有关系~

  • 在搬迁完事后,再看代码,会意识 Swift 更加的古雅了,至少比较于 2来讲好了成都百货上千,至于辛亏哪个地方?你自身写写不就知晓了咯。

  • 末尾,终于得以把 Xocde 七卸载,再也不用忧郁三个同步开无脑闪退了!!!

  • 终极对于度岁的 Swift 4 只想说 快来吧~分分钟把你消除!

  • 实际适配之路才刚刚起头,因为 Xcode 八 自动转的代码并未很好的 斯威夫特三 化。近来只是说在 Swift 三 能够编写翻译通过了而已~

总结

  • 总来说之此次迁徙未有想象中的那么忧伤,即使提案的更改异常的大,不过得益于
    Xcode 八的动员搬迁工具,这一次迁徙耗费时间不多,当然也有相当大希望和本身的代码量有关联~

  • 在搬迁完之后,再看代码,会意识 斯威夫特 更加的幽雅了,至少比较于 贰来讲好了广大,至于辛亏何地?你协和写写不就掌握了咯。

  • 最终,终于能够把 Xocde 七卸载,再也不用担忧四个联合开无脑闪退了!!!

  • 谈到底对于过大年的 Swift 4 只想说 快来吧~分分钟把您消除!

  • 其实适配之路才刚刚初始,因为 Xcode 八 自动转的代码并从未很好的 斯威夫特叁 化。近年来只是说在 斯威夫特 3 能够编写翻译通过了而已~

更多

专门的职业之余,写了点笔记,假使必要能够在作者的 GitHub 看

小说转自 Damonwong的简书

 

其余值得参考文献收藏:

官方:

更多

行事之余,写了点笔记,假如急需能够在我的 GitHub 看

小说转自 Damonwong的简书

 

此外值得参考文献收藏:

官方:

相关文章

发表评论

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

*
*
Website