本篇為 2017 WWDC Session 402 筆記,原視頻在這里
語(yǔ)法特性
Swift3中尚洽,如果將主體函數(shù)的變量定義為private,則其extension無(wú)法讀取此變量靶累,必須將其改為filePrivate才可以腺毫,但是權(quán)限又被擴(kuò)大了。在Swift4中挣柬,private變量也可以被其extension讀取潮酒。
類(lèi)和接口的組合語(yǔ)法支持
例如在代碼中,定義了一個(gè)接口名為Shakeabe邪蛔,并讓UIButton和UISlide來(lái)實(shí)現(xiàn)此接口急黎。但是在之后的變量定義時(shí),如果無(wú)法確定是UIButton類(lèi)型還是Slide類(lèi)型侧到,又不想寫(xiě)多行條件語(yǔ)句來(lái)判斷勃教,可以在Swift4中用如下方法來(lái)搞定:
var targetControl: [UIControl & Shakeable]
再例如,在OC中匠抗,我們會(huì)有如下代碼:
@property (weak) NSView<NSTextInputClient> *client;
在Swift4中故源,直接可以用以下語(yǔ)句來(lái)實(shí)現(xiàn)
var client: [NSView & NSTextInputClient]?
工具附加特性
- XCode提供了refactor功能
編譯相關(guān)
- 加快了編譯速度
- Swift3.2可以和Swift4進(jìn)行共存,并在XCode中提供版本選擇
- 提前編譯Swift-OC Bridge汞贸,加快速度
- 不再單獨(dú)進(jìn)行Indexing绳军,每次編譯時(shí)會(huì)自動(dòng)index
- 在Size方面自動(dòng)過(guò)濾掉不用的代碼,減少體積
- 可以選擇 "Strip Swift Symbol"來(lái)達(dá)到減少編譯后的體積
String相關(guān)
- String的很多characters的簡(jiǎn)介操作直接升級(jí)為對(duì)String的直接操作,String本身變成了Characters Collector矢腻,例如:
Swift3:
let values = "One, Tow,Three...."
var i = values.characters.startIndex
在Swift4中门驾,變成了
Swift4:
let values = "One, Tow,Three...."
var i = values.startIndex
- 在遍歷String的過(guò)程中,如果從下標(biāo)i的string末尾多柑,通常寫(xiě)成:
values[i ..< values.endIndex]
在Swift4中猎唁,直接改成了:
value[i...]
利用i...這種類(lèi)型,會(huì)自動(dòng)匹配到string結(jié)尾
在String的基礎(chǔ)上,增加了SubString類(lèi)型诫隅,為了共享存儲(chǔ)提高代碼執(zhí)行效率腐魂。但是一般情況下不需要手動(dòng)來(lái)進(jìn)行創(chuàng)建,會(huì)根據(jù)String的一些extract相關(guān)方法自動(dòng)返回逐纬,其方法列表也和String基本保持一致蛔屹。
Swift4支持了分段長(zhǎng)字符的表達(dá)方式,例如以前為:
var str = "Q: How does the project \(projectName) do in this process? A: It followed these steps: \(step1), \(step2),\(step3)... Q: That's very helpful."
在Swift4中可以寫(xiě)成:
var str = """
Q: How does the project \(projectName) do in this process?
A: It followed these steps: \(step1), \(step2),\(step3)...
Q: That's very helpful.
"""
看起來(lái)更加的結(jié)構(gòu)化豁生。
其余特性
- 強(qiáng)制要求對(duì)內(nèi)存變量的訪問(wèn)具有互斥性
例如兔毒,在遍歷一個(gè)數(shù)組的過(guò)程中如果同時(shí)在循環(huán)內(nèi)對(duì)數(shù)組進(jìn)行數(shù)據(jù)操作,會(huì)在編譯時(shí)報(bào)錯(cuò)甸箱。
個(gè)人感想
當(dāng)然育叁,由于Session的時(shí)間限制,肯定沒(méi)有把所有Swift4的特性說(shuō)全芍殖。僅就列出來(lái)的這幾個(gè)豪嗽,我個(gè)人比較喜歡的有 XCode支持Swift的refactor,Swift編譯速度加快豌骏,以及String本身包含了Characters Collector這幾個(gè)龟梦。
由于Swift的開(kāi)源屬性,也使得Swif借由社區(qū)的力量越來(lái)越好用以及越來(lái)越強(qiáng)大窃躲。這個(gè)對(duì)iOS開(kāi)發(fā)者來(lái)說(shuō)是一個(gè)天大的好事计贰。
再加上最近WWDC上release出來(lái)的幾個(gè)強(qiáng)大的SDK,例如CoreML蒂窒,ARKit等躁倒,個(gè)人覺(jué)得iOS開(kāi)發(fā)者的好日子來(lái)了。
其它推薦
如果你是Swift新手洒琢,可以參考下我之前寫(xiě)的30天30個(gè)Swift小App
相關(guān)Github地址為:
https://github.com/nimomeng/30-swift-projects-in-30-days