要充分了解Swift的出現意義,就先要從Objective-C的歷史開始說起。
為甚麼寫App要用Objective-C?
話說在1985年,Apple創辦人Steve Jobs權力被架空,憤而辭職,然後帶了幾個以前的同事在外成立了新科技公司NeXT。
NeXT打算開發NeXTSTEP,一個Unix-like的作業系統。
Objective-C誕生於1986年,NeXT在1988年購買了版權,用來開發了AppKit和Foundation Kit,和基於它們的Interface Builder(IB),成為NeXTSTEP軟件的主要開發工具。
- (Foundation Kit有點似層相識吧)
- (順帶一提,第一版的C++出現在1985年,前身名為"C with Classes",和Objective-C一樣旨在加入Object-oriented的功能到C裡面。)
Apple在1996年尾又收購了NeXT,並讓Steve Jobs回到Apple重新執掌CEO一職。
Apple在接收NeXT的技術和人才後,決定推出Macintosh系統的第十個Major version,並命名為OS X,第一個推出的消費者版本就是2001年的OS X 10.0。
- (所以為甚麼macOS或OS X的版本號全都是10.x,例如High Sierra就是10.13)
因此OS X也繼承了NeXT傳統,使用了Objective-C為官方開發工具的語言,並把新的framework命名為Cocoa。
自此基本上奠定了Objective-C在Apple生態中的地位,而及後的iOS也是從OS X借用了很多工具和規範,OS X的Cocoa也變成了iOS的Cocoa Touch(顧名思義了)。
所以我們寫iOS App會用Objective-C,全都由於以上的歷史原因。
Swift的誕生
知道了Objective-C的歷史,就應該明白它有多古老,即使Apple一直在改進它,也只不過是小修小補。Apple需要一個更先進,更為他們度身訂造的新語言,才能方便開發者,吸引他們留在Apple的生態圈,增加競爭力......
Swift就是帶著取代Objective-C的使命來到世上,拯救世人。
特點
- 安全:Swift是一個strong-typed language,它希望盡可能在開發的時候就能發現到unexpected的bug
- 快速:在支援各種fancy功能的同時,也要有比得上C-based languages(C, C++, ObjC)的速度
- 易於表達:簡化語法,方便開發人員,學習門檻也降低
Pointer
另外,由於Objective-C來自C family,語法上經常會使用pointer reference。
Swift就像是Objective-C without C
,收起各種到處飛的pointer,轉用更簡潔更安全的語法。要用的話,只能用UnsafePointer
,強行無時無刻都提醒你不要用。
Optional
經常我們看到的Swift code都有共同特點,就是各種問號(?)感嘆號(!)到處飛。
它是Swift的一大功能,確保不會出現runtime時嘗試access null的properties,發生像Javascript TypeError: 'undefined' is not an object
的錯誤。
詳細容日後再談。
後記
Swift對整個IT業界的意義
最近看到一篇2014年的文章,談論Swift的重大意義,其中有一段說到Javascript的問題,頗為有趣:
Javascript, and technologies like Node.JS and Angular in web browsers are increasingly compelling, but also a dead-end.
Javascript一些來自遠古時代的語言設計並不好,但由於大家不停投放資源、時間在它身上,製作出各種便利工具和龐大的生態圈,使得Javascript成為了Web開發中唯一的選擇。
Javascript的壯大正正是Web的故步自封,很多美妙的功能只能建造在糟糕的語言上,使Web開發鑽進了死胡同。
我覺得Javascript也有ES6, ES7一直在改進語法,同時也要顧及到Web運行環境太複雜,不能一刀切更換新語言,不可和身處Apple生態圈的Swift比較。
但不失為一篇有趣的文章,有興趣可以看看原文。