Swift雜談

dopcn發表於2015-04-16

有關 Swift 的一些事

昨天晚上我和一些本地的開發者們聊了聊 Swift。其中一些內容至今仍徘徊在我的腦海之中。例如下面這個問題:

問題

兩年之後,你的公司正在招聘,在所有應徵者中最優秀的那位有一個問題:她的開發經驗僅限於 Swift 語言,對於 Objective-C 並不熟悉。但是可以確定她對於 SDK 非常熟悉並且有能力交付高質量的軟體。

而你所擁有的規模相當龐大的舊程式碼都是使用 Objective-C 的。可能也有小部分功能開始使用 Swift 開發,也可能沒有,可能你已經計劃在後續的開發中更多地使用 Swift,也可能沒有。那麼問題來了:

你是否會僱傭這個人?

學習 Swift 是困難的

Objective-C 看上去很難學,因為少見的中括號語法 [ 和 ] ,以及那些長長的函式名。事實上它有一些古板和刻薄,像一個眉毛濃密的老爺爺生氣地要求你完整地拼寫“I am laughing out loud”,而不是使用縮寫 LOL。

但是相比於 Swift,Objective-C 其實是更容易學的。初看 Swift 你可能會覺得它很簡單,所有 JavaScript 程式設計師都會覺得 Swift 的語法非常熟悉,甚至很多人認為他們開發原生應用的好日子到了。

我相信這種大家更熟悉的語法會幫助更多的人起步。但是很快你會遇到一些 Objective-C 中根本不會碰到的概念(例如:optional, generic 和 tuple),還有一些 Objective-C 中不需要過多考慮的概念(例如:值和引用,函式式設計和嚴格型別安全)。並且你一定會遇到如何和 Objective-C 程式碼互動的問題,如果你只使用 Objective-C 開發這顯然不是一個問題。

Angle-bracket-T Blindness

為了說明下面這個觀點我可能會有一點誇張——OK,應該是相當誇張。大多數有關 Swift 的部落格有一個共同的模式,這個模式如下:

下面是舊式的做法:

你可以直觀地看到這是多麼糟糕的做法。不易理解的迴圈和沒有型別宣告的變數,讓我們用更現代的方法來改寫它:

[snip]

[snip 200 lines of code]

很明顯以上這個例子是有意地進行了誇張,所以非常荒謬和無意義。可能對於 Swift 來說這有點不公平,但是我相信任何像我一樣讀過許多有關 Swift 文章的人都會理解我在試圖表達什麼。

(有許多部落格上有關 Swift 的文章是很棒的。我最喜歡的兩個分別是 NSHipster 和 David Owens II,但是我依然會時不時遇到 angle-bracket-T blindness,即使是他們寫的文章。)

Objective-C 並不會停止改變

這是一個預測。蘋果顯然擁有比任何人更多的 Objective-C 程式碼。改進 Objective-C,特別是為了讓開發者們可以變得更高效、做出更優秀的 APP 的改進,是對蘋果有好處的。

可能我們會迎來的是更多的融合,Objective-C 會變得更加容易和 Swift 在同一個專案裡共同工作。

我一直覺得對於蘋果來說,改進 Objective-C 顯然比用 Swift 重寫所有程式碼要來得容易得多。

但是 Swift 毫無疑問是未來

即使處在一個非常早期的階段,Swift 的使用情況和開發者們對他的熱情,已經超出了我的預期。如果你擁有一個開發者帳號,你可以瀏覽一下蘋果的 Swift 論壇。

現在的情況是,當你搜尋有關最新的 API 的問題時,你極有可能會碰到的是 Swift 程式碼。至少在我身上這種事情已經發生過許多次,我需要將 Swift 程式碼轉換到 Objective-C 去,沒有想到這種情況來得這麼早。

Swift 已經來了。

P.S.

最後,我會僱傭只擁有 Swift 經驗但是沒有 Objective-C 經驗的人。