swift 近兩年的發展勢頭非常的迅猛,而在它開源後,更是如井噴一樣的勢頭,除了 ios 平台,還支援了 linux。 而今年下半年, swift 3.0 也會隨之發布。這次我就和大家聊一下 swift 3.0 會有什麼新東西吧。
這裡面列出了 swift 3.0 版本著重處理的地方,我來幫大家總結一下:
所謂 abi 就是二進位制介面, 是更加底層的機制。 我們都熟知 api,是應用程式介面,比如fun open(path: string)
, 這時乙個函式簽名,只要我們的程式在編譯的時候能找到這個方法簽名的實現就可以編譯通過。這樣,我們想改變這個方法的具體實現的時候,並不需要修改我們呼叫層的**,只需要將這個方法的實現替換成另外乙個庫就可以了。
而 abi 就更加底層了,它是基於語言和系統層面的。如果 swift 3 對 abi 的優化做的足夠好的話,我們就可以之間在之後的版本中引用老版本 swift 語言編譯的庫了。就不用怕 swift 語言公升級之後,很多第三方庫都需要修改的問題了。
相信有從 swift 1.x 遷移到 swift 2 體驗的同學們對這個感觸會更深~ 當然,這是 swift 3 的乙個目標,能不能實現就要看社群的力量了。
所謂易碎介面嘛,是現代程式語言的乙個通用問題,它的全稱叫做fragile binary inte***ce
。 簡單來說呢,就是 swift 以及當前的大多數主流開發語言中的類的屬性,在底層都是通過偏移來訪問的,比如book.name
, 我們在程式中訪問乙個物件的屬性非常直觀。 但他在編譯後,實際上是這樣的形式location(book) + offset(name)
。訪問 name 屬性是通過 book 物件所在的記憶體位址加上乙個偏移來實現的。
那麼 swift 中的類在編譯後,會將它所有的屬性的偏移值也都計算出來。這樣會加快程式在執行時的執行速度,因為不需要在執行時再計算這些偏移量了。如果所有的類之間沒有任何關聯就不會有什麼問題,但在實際中,我們使用類都會有繼承關係。假如我們的主專案中引用了乙個外部的庫,我們主程式中繼承了這個外部庫中的類。那麼如果這個庫中有任何改動,我們都必須重新編譯所有的類繼承樹上面的**,否則在我們主程式的子類中,就會發生偏移計算錯誤。
簡單來說呢,如果 swift 3.0 能把fragile binary inte***ce
處理好的話,對我們開發者最直觀的感受就是: 編譯速度加快。
關於fragile binary inte***ce
更詳細的內容,大家如果有興趣的話可以參考這裡:
這個很簡單,就是讓 swift 能移植到更多的其他平台,並且讓 swift 寫出的**,可以正確的執行在所有這些平台上。
目前的 swift 版本已經很好的支援了泛型的大部分特性了,這點大家在看 swift 2.2 的 api 文件中其實已經能夠發現了。但目前還並沒有將泛型的特性完全實現,所以這次 swift 3.0 打算全面支援泛型的所有特性。
這次還發布了 swift 語言的 api 設計規範。 這個規範的目的是讓大家設計出更加統一的 api,裡面給出了很多**規範,這個非常值得一看,即便我們不去構建開源庫,對我們的日常**風格也是很有幫助的。並且 swift 3.0 會對大多數 api 根據這個規範進行重新設計。理解了這個設計規範,對我們理解 swift 語言也是很有幫助的~
swift 是乙個快速發展的語言,開源社群源源不斷的給它注入力量。從這次 3.0 的發布內容來看,它正在嘗試解決程式語言最前沿的問題,比如fragile binary inte***ce
, 大家有興趣可以關於它的相關資料,這裡就不再贅述。
原文發布時間為:2013-04-02.
Swift3 0 建構函式
viewcontroller.swift import uikit 在swift中,同乙個專案中 同乙個命名空間 所有的類預設都是共享的,不需要引用,可以直接訪問,不需要import 所有物件的屬性 var,也可以直接訪問到 class viewcontroller uiviewcontroller...
Swift3 0 異常錯誤
swift3.0 真的很簡單 swift3.0 資料型別 swift3.0 array swift3.0 字典 swift3.0 可選值 swift3.0 集合 swift3.0 流控制 swift3.0 物件和類 swift3.0 屬性 swift3.0 函式和閉包 swift3.0 初始化和釋放...
Swift3 0 空間命名
swift3.0 真的很簡單 swift3.0 資料型別 swift3.0 array swift3.0 字典 swift3.0 可選值 swift3.0 集合 swift3.0 流控制 swift3.0 物件和類 swift3.0 屬性 swift3.0 函式和閉包 swift3.0 初始化和釋放...