Session402-What new in Swift

Private 權(quán)限控制

Swift3中,如果將主體函數(shù)的變量定義為private攘残,則其extension無(wú)法讀取此變量讨惩,必須將其改為filePrivate才可以,但是權(quán)限又被擴(kuò)大了氏身。在Swift4中巍棱,private變量也可以被其extension讀取。

Swift3.0時(shí)Private權(quán)限
Swift4.0時(shí)Private權(quán)限

類和接口的組合語(yǔ)法支持

Swift4.0中泛型支持類和接口的組合

類和接口的組合

編譯相關(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á)到減少編譯后的體積

減少Swift暴露給OC的接口

在之前的Swift 版本中到踏,所有繼承自NSObject的類的屬性和方法都會(huì)被默認(rèn)加上@objc標(biāo)識(shí),以便將其暴露給Objective-C尚猿,編譯器會(huì)為這些方法和屬性生成可供OC調(diào)用的代碼夭禽,但是實(shí)際情況可能只有很少量的幾個(gè)方法需要暴露給OC,這就造成很大的空間浪費(fèi)谊路。因此在Swift 4中讹躯,編譯器大部分情況下不會(huì)自動(dòng)添加@objc標(biāo)識(shí),如果要暴露給OC缠劝,需要手動(dòng)添加潮梯。

Before Swift 4, the compiler made some Swift declarations automatically available to Objective-C. For example, if one subclassed from NSObject, the compiler created Objective-C entry points for all methods in such classes. The mechanism is called @objc inference.

In Swift 4, such automatic @objc inference is deprecated because it is costly to generate all those Objective-C entry points. When "Swift 3 @objc Inference" setting is set to "On", it allows the old code to work. However, it will show deprecation warnings that need to be addressed. It is recommended to "fix" these warnings and switch the setting to "Off", which is the default for new Swift projects.


可以通過(guò)以上設(shè)置開(kāi)啟/關(guān)閉Swift3的 @objc推斷

String相關(guān)

  • Multi-line string literals 多行字符串字面量
編譯器自動(dòng)給每行前面添加換行符號(hào)
  • String本身是character的集合(Collection)
    所以可以把String當(dāng)Collection進(jìn)行操作
屏幕快照 2017-07-02 上午11.36.07.png
  • 新增類型Substring
    對(duì)String進(jìn)行substring等操作會(huì)得到一個(gè)類型為Substring的字符串。Substring跟String很類似惨恭,他們都實(shí)現(xiàn)了StringProtocol秉馏。
    在 Swift 中,String 的背后有個(gè) Owner Object 來(lái)跟蹤和管理這個(gè) String脱羡,String 對(duì)象在內(nèi)存中的存儲(chǔ)由內(nèi)存起始地址萝究、字符數(shù)免都、指向 Owner Object 指針組成。Owner Object 指針指向 Owner Object 對(duì)象帆竹,Owner Object 對(duì)象持有 String Buffer绕娘。當(dāng)對(duì) String 做取子字符串操作時(shí),子字符串的 Owner Object 指針會(huì)和原字符串指向同一個(gè)對(duì)象栽连,因此子字符串的 Owner Object 會(huì)持有原 String 的 Buffer险领。當(dāng)原字符串銷毀時(shí),由于原字符串的 Buffer 被子字符串的 Owner Object 持有了秒紧,原字符串 Buffer 并不會(huì)釋放绢陌,造成極大的內(nèi)存浪費(fèi)。
    在 Swift 4 中熔恢,做取子串操作的結(jié)果是一個(gè) Substring 類型脐湾,它無(wú)法直接賦值給需要 String 類型的地方。必須用 String(<substring>) 包一層叙淌,系統(tǒng)會(huì)通過(guò)復(fù)制創(chuàng)建出一個(gè)新的字符串對(duì)象秤掌,這樣原字符串在銷毀時(shí),原字符串的 Buffer 就可以完全釋放了凿菩。
屏幕快照 2017-07-02 上午11.37.53.png
  • Unicode
    改善了在計(jì)算Unicode字符長(zhǎng)度時(shí)的正確性
    在 Unicode 中机杜,有些字符是由幾個(gè)其它字符組成的,比如 é 這個(gè)字符衅谷,它可以用 \u{E9} 來(lái)表示
屏幕快照 2017-07-02 上午11.39.04.png

Associated type constraints 關(guān)聯(lián)類型約束

  • protocol中也可以使用where語(yǔ)句對(duì)關(guān)聯(lián)類型進(jìn)行約束了
protocol SomeProtocol where Self: UICollectionViewCell {
}
  • Sequence協(xié)議有自己的Element associatedtype了椒拗,不需要寫Iterator.Element了
extension Sequence where Element: Numeric {
  var sum: Element {
      var result: Element = 0
      for element in self {
          result += element
      }
      return result
  }
}
[1,2,3,4].sum

強(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ò)蚀苛。

屏幕快照 2017-07-02 上午11.43.42.png
屏幕快照 2017-07-02 上午11.43.42.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市玷氏,隨后出現(xiàn)的幾起案子堵未,更是在濱河造成了極大的恐慌,老刑警劉巖盏触,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渗蟹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赞辩,警方通過(guò)查閱死者的電腦和手機(jī)雌芽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辨嗽,“玉大人世落,你說(shuō)我怎么就攤上這事≡阈瑁” “怎么了屉佳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵谷朝,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我武花,道長(zhǎng)圆凰,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任髓堪,我火速辦了婚禮送朱,結(jié)果婚禮上娘荡,老公的妹妹穿的比我還像新娘干旁。我一直安慰自己,他們只是感情好炮沐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布争群。 她就那樣靜靜地躺著,像睡著了一般大年。 火紅的嫁衣襯著肌膚如雪换薄。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天翔试,我揣著相機(jī)與錄音轻要,去河邊找鬼。 笑死垦缅,一個(gè)胖子當(dāng)著我的面吹牛冲泥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播壁涎,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼凡恍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了怔球?” 一聲冷哼從身側(cè)響起嚼酝,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎竟坛,沒(méi)想到半個(gè)月后闽巩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡担汤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年涎跨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漫试。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡六敬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驾荣,到底是詐尸還是另有隱情外构,我是刑警寧澤普泡,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站审编,受9級(jí)特大地震影響撼班,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜垒酬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一砰嘁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勘究,春花似錦矮湘、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至景描,卻和暖如春十办,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背超棺。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工向族, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人棠绘。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓件相,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親弄唧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子适肠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容