
Swift 是蘋果在 WWDC2014 發表的一門程式設計語言,用來撰寫 OS X 和 iOS 應用程式。2010 年 7 月,LLVM 編譯器的原作者暨蘋果開發者工具部門總監克里斯·拉特納(Chris Lattner)開始著手 Swift 程式設計語言的工作。除此之外,還有一個 dogfooding 團隊也大力參與其中。歷時四年,Swift 才得以與用戶見面。
蘋果宣稱,Swift 程式設計語言具有「快速、現代、安全、互動」的特點,它基於 C 和 Objective-C,而卻沒有 C 的一些相容約束。Swift 採用了安全的程式設計模式和添加現代的功能,來使得程式設計更加簡單、靈活和有趣,而它的介面則基於 Cocoa 和 Cocoa Touch 框架,展示了軟體發展的新方向。
Xcode Playgrounds 功能是 Swift 為蘋果開發工具帶來的最大創新,該功能提供強大的互動效果,能讓 Swift 原始程式碼在撰寫過程中能即時顯示出其運行結果。
做為資深蘋果開發專家的 Boisy G. Pitre曾任 Siri 語音辨識技術提供方 Nuance 公司 Mac 產品小組的資深軟體工程師,參與開發了語音辨識軟體 Dragon Dictate。如今,他在情緒辨識公司 Affectiva 任職行動遠景規劃師。
Boisy Pitre 十分青睞 Swift 程式語言,他還撰寫了一本針對初學者的《Swift 基礎教程》,從變數、類型、函數、閉包等基本概念入手,結合 Swift 示例,一步步指導讀者使用 Swift 開發 App,他在書的最後還給出了一個 App 開發全流程。
Swift 語言對 iOS 和 Android 開發的影響
當蘋果引入 Swift 時,我就知道這門程式語言會在幾年之內成為電腦語言版圖中的重要一塊。
我很難預測做為開來源語言的 Swift 會如何影響 Android 開發。Google 在語言初創方面有 Go 語言,Go 對於 Android 來說就像是 Swift 之於 iOS。不過我很期待會有人用 Swift 寫 Android 應用程式,這就像是有人用 Go 寫 iOS 應用程式一樣。
一種程式語言會比另一種程式語言更成功嗎?各自平台的語言一定會依附在它們本來的平台上嗎?只有時間能告訴我們。但是蘋果開源 Swift 程式語言的決定肯定會讓各種變化朝更好的方向發展。
Objective-C 很不錯,但它已經過時了
所有電腦語言都會從其他語言身上借鑒一些東西。對於 Swift 來說也是如此。從語法和儲存模型的角度上說,Swift 上就有很多 Rust 的影子。此外,Swift 對於安全的強調使其與 C 和 C++ 保持了一定距離,所以它們之間的共同點比較少。我相信蘋果很努力想讓 Swift 成為自己的語言。
目前 iOS 中的很多應用框架都還是 Objective-C 的,調用的方式是使用橋接檔頭,但未來會出現更多基於 Swift 的框架,今後的調用也會變為更加簡潔的方式,蘋果正在努力實現這個艱鉅的任務,因為需要轉換的框架有很多。不過很快,我們就會看到專屬於 Swift 的新框架,這樣的框架在 Objective-C 中甚至都找不到同類。這種情況的發生也會對 Objective-C 的後續使用造成很大的影響。

我認為 Swift 在未來有可能會取代 Objective-C,沒有人知道這會花多長時間,但是應該是在 5 年之內。不過,電腦語言的生命很長,C 語言到現在已經有 40 歲了,所以 Objective-C 也不會徹底消失,它只是將在語言世界中所佔的市占變得非常小。
Objective-C 是一門很不錯的語言,但是它帶有 C 語言的遺留問題和包袱。對於編寫應用軟體來說,Objective-C 在未來會變得越來越脫節。拿我自己舉例來說,我現在就已經不再用 Objective-C 來開啟任何一個新的 iOS 或 OS X 專案了,對於新專案來說,我只使用 Swift 來開發。
如何選擇學習哪種程式設計語言?
初學者完全可以先學習 Swift。Swift 最讓我青睞的特性是其語法的清晰度。用關鍵字「let」建立一個常量變數,和用關鍵字「var」建立一個可變變數相比,很大程度上簡化了 C / C++ 風格的語法。用執行具名引數可以清晰地寫函數(如 Objective-C),而創建和使用閉包(Closure)也變得更簡單。
而對於已經掌握一兩門程式設計語言的程式師來說,他的選擇則要取決於「已有的一兩種語言」是什麼。如果這兩種語言是 Objective-C 和 Swift,或者 C 和 C++,或者其中任何組合,為了挑戰思惟,他可以去學習一種完全不同的語言,比如一種函數式語言(舉例:Scheme)。
C、C++、Objective-C 以及 Swift 這樣的命令式語言都遵循著相同的模型,學習同類語言很簡單,因此就需要讓自己多接觸不同的語言泛型。雖然他可能並不會用這種語言來寫應用,但這會有利於全面開啟他對於電腦語言的理解。

有必要掌握所有 API 嗎?
關於何時接觸大量的庫和 API,以及是否需要學習所有 API 的問題,我經常會用木匠的工具腰帶做類比。
大家可以想像一下,一個木匠的工具腰帶中會裝有所有你能想像得到的工具嗎?結論當然是否,他只會裝上那些經常使用的工具。當他需要特殊工具的時候,他會來到卡車前或者庫房裡,打開裡面的大工具箱,把需要的特殊工具找出來使用,然後再把它放回去。而這種使用頻率往往在很長一段時間裡也只有一次到兩次。
對於程式設計語言和 API 來說也是如此。雖然知道的 API 越多,你就越能更好地解決問題,但是有多少人能完整地瞭解所有的 API 呢?我的建議是,先比較完整地學習一門語言,然後再繼續研究這種語言的細微之處,也就是開始接觸這門語言中可以用來創建有用應用的框架和 API。然後可以按照一定頻率(比如每週一次,每次 3-5 小時)去選擇一個新的 API 來學習它的功能。你可能並不會經常使用這個 API,但是你瞭解它,當需要用到時,你就會知道「從哪裡把它取出來使用」。
iOS開發專家的知識框架是什麼樣的?
一個全面的 iOS 專家必須掌握這四樣東西:
- 用來寫應用的語言(Swift / Objective-C)。
- 對創建軟體的工具的控制(Xcode)。
- 關於 iOS 應用基礎框架和 API 的強大知識儲備。
- 鑒別好的 UI 設計的能力。
他可能要經歷很多應用程式和上百小時的程式設計才能達到這個水準,每個應用都有自身的要求和需要的 API。只要你寫的應用程式越多,就能越廣地接觸到各式蘋果框架,UI 設計技巧也會越來越好。
(本文由 雷鋒網 授權轉載)