天天看點

優雅的從Objective-C轉向Swift

從2014年WWDC釋出Swift至今已經有兩年的時間了,Swift的發展可謂是十分迅速,能不能替代Objective-C我不敢說,但是由于Swift相對于Objective-C存在的多方面優勢,逐漸成為iOS和Mac開發的主要語言是毋庸置疑的。

Swift最新資訊

Swift團隊在部落格中宣布Swift 3.0語言首個開發者預覽版将于5月12日釋出,正式版将在4-6周之後推出。開發者預覽階段并無确定的更新周期和計劃,不過Swift團隊稱努力将其控制在4-6周内。按此計劃,Swift 3.0将錯過WWDC釋出視窗,團隊計劃于年底随新版本Xcode更新版一起釋出。

Swift存在的優勢

雖然程式設計語言不會那麼容易消逝,但堅持衰落範例的開發小組正在這麼做。如果你正為移動裝置開發應用程式,并且你還沒有研究Swift,那麼注意:當Swift涉及到Mac、iPhone、ipad、Apple Watch和未來裝置的應用開發時,它不僅會排擠掉Objective-C,而且還會取代在Apple平台中做嵌入式開發的C語言。

由于幾個關鍵特性,在未來幾年,Swift有很大潛力成為創造身臨其境的、響應迅速的、面向使用者的應用程式的實際程式設計語言。

1. Swift 容易閱讀

Swift 丢棄了遺留下來的約定。因而你不再需要行尾的分号,以及 if/else 語句中圍繞條件表達式的括弧。另外一個大變化就是方法的調用不再互相嵌套成中括号的深坑 – 再見吧,[[[ ]]]。Swift 中的方法和函數的調用使用行業内标準的在一對括弧内使用逗号分隔的參數清單。這樣做的結果就是一種帶有簡化了句法和文法的更加幹淨有表現力的語言。

除了其它當代流行的程式設計語言之外,Swift 更像是自然的英語了。這種可讀性是的其很容易能被其它來自 JavaScript,Java,Python,C#,以及 C++ 的開發者納入到他們的工具鍊之中。

2. Swift 更易于維護

Swift 丢掉了對着倆檔案的要求。Swift1.2 中 Xcode 和 LLVM 編譯器可以自動計算出以來并執行增量建構。如此,将内容清單 (頭檔案) 同内容主體(實作檔案)相分離。Swift 将 Objective-C 頭檔案(.h) 和實作檔案 (.m) 合并成了一個代碼檔案 (.swift)。

Xcode 和 LLVM 編譯器可以在幕後做一些工作來減輕程式員的工作負擔. 使用 Swift, 程式員可以少做些費腦力的記憶性工作,進而能在建立app邏輯的工作上面赢得更多的時間. Swift 為我們程式員裁掉了那些樣闆式的工作,同時對代碼、注釋以及所要支援的特性的品質都有所提升.

3. Swift 更加安全

首先是類型安全,盡管Swift中要生命的類型比Objective-C少了很多,但是Swift的類型推斷機制不得不說很強大。以及增加确定類型和可選類型來保證類型安全。

Objective-C 有意思的一個方面是如果你調用方法的是一個值為 nil (未初始化)的指針變量,什麼事情都會不發生. 表達式或者一行操作變成了一項空操作(no-operation (no-op)), 而這就使得其看起來會有不會奔潰的好處, 但其實它已經變成了一個巨大的bug來源. no-op 會導緻不可預測的行為, 這是程式員在嘗試找出并修複某種随機的奔潰,或者要停止反常的行為時所要面對的敵人。

在Swift代碼中的可選類型使得一個nil可選值的可能性變得非常的明确, 這意味它能在你寫下一段糟糕的代碼時會生成一個編譯器錯誤. 這就建立了一種短程回報的循環,可以讓程式員帶着目标去寫代碼. 問題在代碼被寫就時就可以被修複, 這大大節省了你要在修複有關來自 Objective-C 指針邏輯的bug時需要耗費的時間和金錢。

4. Swift 的記憶體管理是統一化的

雖然Objective-C下ARC機制解決了在MRC時代下的手動引用計數這個令人頭疼的問題,然而它并不支援過程式的 C 語言代碼和像 Core Graphics 這樣的 API。這意味着在使用 Core Graphics API 以及其它 iOS 上的底層 API 時,記憶體管控的處理都是程式員的責任。但是到了Swift中這一機制顯得更加強大和統一。因為 Swift 中的 ARC 在過程式的和面向對象的代碼中都能起作用,它也就不再需要程式員進行心理上的上下文切換了, 即使是他們在編寫要觸及底層API的代碼時也不需要 – 這在目前版本的 Objective-C 中就是一個實實在在的問題。

5. Swift 代碼更少

Swift 減少了重複性語句和字元串操作所需要的代碼量。在 Objective-C 中, 使用文本字元串将兩塊資訊組合起來的操作非常繁瑣。Swift 采用當代程式設計語言的特性,比如使用“+”操作符将兩個字元串加到一起,這在 Objective-C 中是沒有。

Swift中的類型系統減少了代碼語句的複雜性–作為編譯器可以了解的類型。比如,Objective-C要求程式員記住特殊字元标記(%s,%d,%@)并且提供了一個用逗号分隔的變量來代替每個标記。Swift支援字元串插入,這就消除了需要記住的标記和允許程式員直接插入變量到面向使用者的字元串中。

6. Swift 更快

删除遺留下來的C語言約定大大提升了引擎蓋之下Swift的性能. Swift代碼性能的基準測試一直都瞄向蘋果公司所緻力于的Swift運作app邏輯的速度提升.

根據Primate Lab——時下流行的 GeekBench 性能工具的創造者——的調查, 2014年12月中使用曼德爾布羅算法(Mandelbrot algorithm)進行計算密集型任務的性能上,Swift已經逼近C++的表現了.

7. 開源項目中更少的名稱沖突

Objective-C 代碼中一直令人很困擾的問題就是缺乏對命名空間的正式支援, 它是 C++ 處理檔案名沖突的解決方案。當名稱沖突發生在 Objective-C 中時,就會是一個連接配接器錯誤,會導緻 app 無法運作。解決的辦法倒是有,可它們都有潛在的隐患。一般的約定是使用兩到三個字母字首來區分編寫的 Objective-C 代碼。

在簡單如 Array,Dictionary 以及 String 這樣的名字中你可以看到 Swift 的影響力,而不是脫胎于缺少命名空間的 Objective-C 中的 NSArray、NSDictionary 以及 NSString。

Swift 的命名空間是基于一份代碼檔案所屬的目标位置。這就意味可以使用命名空間辨別來區分出不同的類和值。Swift 中的這個改變很大,它極大的友善了将開發員項目、架構以及庫內建到你代碼中來的操作。命名空間使得在內建開源項目時,不用擔心來自不同軟體公司的同名代碼檔案會發生沖突。現在 Facebook 和蘋果公司可以同時使用一個叫做 FlyingCar.swift 的對象代碼檔案,不會有任何錯誤或者失敗。

8. Swift 支援動态庫

Swift 中沒有受到足夠重視的一個最大的問題是靜态庫向動态庫的切換,其在主要釋出版(iOS8,iOS7等等)會被更新。動态庫是可以被連結到 app 的可執行代碼塊。這一特性可以讓現有的 Swift 應用可以連結到随着時間推移所産生的更新版本的 Swift 語言。

動态庫處在應用可執行檔案之外,不過會被包含在從 AppStore 上下載下傳的應用包中。它減小了 app 被加載到記憶體中的初始大小,因為外部代碼隻在被用到時才會被連結進來。

9. Swift Playgrounds 鼓勵互動式編碼

Swift 新引入的 Playgrounds 是有經驗的開發者的福音。Playgrounds 的靈感來自于蘋果公司前雇員 Brett Victor 的工作。Playgrounds 可以讓程式員用比如說5到20行代碼來測試一種新的算法或者圖形程式,不用去建立一個完整的 iPhone 應用。

10. Swift 是一個你可以影響的未來

Swift 向開發者社群提供了一個直接的方式,去影響一門語言,它将會被用于應用的建立,嵌入式系統(如果蘋果公司向第三方的嵌入式架構和晶片進行了授權)以及像 Apple Watch 這樣的裝置.

11. Swift: 更易上手,特性豐富的語言

使用 Swift,程式員隻要維護原來一半量的代碼檔案,手動的代碼同步工作為零,标點輸入出錯的機率也遠遠低于以前 – 這樣就能騰出更多的時間寫高品質的代碼。通過使用可選類型 —— 一種針對傳回或不傳回值的編譯時安全機制,而傳回值是同步操作、網絡失效時無效的使用者輸入以及資料驗證錯誤發生時普遍會遇到的問題。ARC 在 Swift 中對過程式 C 風格的代碼,還有蘋果公司 CObjective-Coa 架構使用的面向對象代碼都進行了統一。

Swift入手

作為Objective-C開發者其實真不用擔心如何轉向Swift。Swift和Objective-C其實骨子裡還是一樣的,變的隻是文法形式。比如說方法的調用,大部分你隻需要将Objective-C的中括号去掉,換成點文法就OK了。寫過兩個Swift方法之後就可以依照這樣的形式調出其他的方法,完全沒有學習難度。

我從一開始學習Swift的時候是通過官方文檔來學習的,當然我英文不那麼好,是以就看的中文翻譯的。

點這裡開始學習吧

看起來好多,其實不需要都看完,反正我看的時候基本都是跳着看的,有Objective-C作為基礎,看起來根本不會吃力。并且看着看着就會發現越來越多的根本都不需要看了,猜都能猜出來是講Objective-C轉成Swift是怎麼寫的了。如果時間充足,可能這些用兩三天都差不多可以過一遍了,至少用來寫項目是沒有問題的,剩下的就是慢慢調整寫法習慣。那些不常用的地方,用到時的時候再來查就可以了。

文檔不得不說寫的很好,不建議有Objective-C基礎的再去看Swift視訊來學習,我覺得純粹是在浪費時間。

可能會有很多人認為我通篇在扯廢話,實際上你在看了本篇文章後再去學習Swift就會帶有目的性的去學,可以深刻了解到Objective-C與Swift本質上有那些不同,而不是填鴨式的學習了。