蘋果的新程式語言 Swift 簡介

lucida發表於2014-06-04

關於

這篇文章簡要介紹了蘋果於WWDC 2014釋出的程式語言——Swift。

前言

在這裡我認為有必要提一下Brec VictorInventing on Principle,Swift程式設計環境的大部分概念都源自於Brec這個演講。

接下來進入正題。

 

Swift是什麼?

Swift是蘋果於WWDC 2014釋出的程式語言,這裡引用The Swift Programming Language的原話:

Swift is a new programming language for iOS and OS X apps that builds on the best of C and Objective-C, without the constraints of C compatibility. Swift adopts safe programming patterns and adds modern features to make programming easier, more flexible and more fun. Swift’s clean slate, backed by the mature and much-loved Cocoa and Cocoa Touch frameworks, is an opportunity to imagine how software development works. Swift is the first industrial-quality systems programming language that is as expressive and enjoyable as a scripting language.

簡單的說:

  1. Swift用來寫iOS和OS X程式。(估計也不會支援其它屌絲系統)
  2. Swift吸取了C和Objective-C的優點,且更加強大易用。
  3. Swift可以使用現有的Cocoa和Cocoa Touch框架。
  4. Swift兼具編譯語言的高效能(Performance)和指令碼語言的互動性(Interactive)。

Swift語言概覽

基本概念

注:這一節的程式碼源自The Swift Programming Language中的A Swift Tour

Hello, world

類似於指令碼語言,下面的程式碼即是一個完整的Swift程式。

變數與常量

Swift使用var宣告變數,let宣告常量

型別推導

Swift支援型別推導(Type Inference),所以上面的程式碼不需指定型別,如果需要指定型別:

Swift不支援隱式型別轉換(Implicitly casting),所以下面的程式碼需要顯式型別轉換(Explicitly casting):

字串格式化

Swift使用\(item)????????????

?????

Swift??[]????????array?????dictionary??

?????????initializer?????????????

??????????????[]????????[:]??????

???

??

Swift???????if?switch???????for-in?for?while?do-while???/?????????????/????body??????

????

??if?let?????????????nullable variable????????????????????????????

靈活的switch

Swift中的switch支援各種各樣的比較操作:

?

????

for-in????????????????

while???do-while???

Swift?????for????????????..?????????for-in????????

???Swift??..??...?..???????????...??????????

?????

??

Swift??func????????

?????Tuple???????

????????????

??????????

????????????????????????????

??

??????????????Swift?????{}???????

??????????????????????

??????????????????????????????????????????

????

??????

Swift??class?????????????????

建立Shape類的例項,並呼叫其欄位和方法。

通過init構建物件,既可以使用self顯式引用成員欄位(name),也可以隱式引用(numberOfSides)。

??deinit???????

?????

Swift????????override??????

注意:如果這裡的simpleDescription方法沒有被標識為override,則會引發編譯錯誤。

屬性

為了簡化程式碼,Swift引入了屬性(property),見下面的perimeter欄位:

???????setter?????????????newValue?

willSet?didSet

EquilateralTriangle????????????

  1. ??????????
  2. ??????????
  3. ?????????

???????????????????????????????willSet?didSet?


????triangle?square?????sideLength?

????

Swift????????????????????????????????????????????????????????

??Swift???????????????????numberOfTimes?????times?????

???????

???????????????????????????????nil????????????????????????nil????

?optionalSquare?nil??sideLength?????????

?????

??

??enum????????Swift??????????

??toRaw?fromRaw????raw??????????????

??????????member value???????actual value???????raw value????????

??????????????????????????????

???????????????????????????????????????????

結構

Swift使用struct關鍵字建立結構。結構支援構造器和方法這些類的特性。結構和類的最大區別在於:結構的例項按值傳遞(passed by value),而類的例項按引用傳遞(passed by reference)。

協議(protocol)和擴充套件(extension)

協議

Swift使用protocol定義協議:

型別、列舉和結構都可以實現(adopt)協議:

擴充套件

擴充套件用於在已有的型別上增加新的功能(比如新的方法或屬性),Swift使用extension宣告擴充套件:

泛型(generics)

Swift使用<>來宣告泛型函式或泛型型別:

Swift也支援在類、列舉和結構中使用泛型:

有時需要對泛型做一些需求(requirements),比如需求某個泛型型別實現某個介面或繼承自某個特定型別、兩個泛型型別屬於同一個型別等等,Swift通過where描述這些需求:

Swift語言概覽就到這裡,有興趣的朋友請進一步閱讀The Swift Programming Language

接下來聊聊個人對Swift的一些感受。

個人感受

注意:下面的感受純屬個人意見,僅供參考。

大雜燴

儘管我接觸Swift不足兩小時,但很容易看出Swift吸收了大量其它程式語言中的元素,這些元素包括但不限於:

  1. 屬性(Property)、可空值(Nullable type)語法和泛型(Generic Type)語法源自C#。
  2. 格式風格與Go相仿(沒有句末的分號,判斷條件不需要括號)。
  3. Python風格的當前例項引用語法(使用self)和列表字典宣告語法。
  4. Haskell風格的區間宣告語法(比如1..31...3)。
  5. 協議和擴充套件源自Objective-C(自家產品隨便用)。
  6. 列舉型別很像Java(可以擁有成員或方法)。
  7. classstruct的概念和C#極其相似。

注意這裡不是說Swift是抄襲——實際上程式語言能玩的花樣基本就這些,況且Swift選的都是在我看來相當不錯的特性。

而且,這個大雜燴有一個好處——就是任何其它程式語言的開發者都不會覺得Swift很陌生——這一點很重要。

拒絕隱式(Refuse implicity)

Swift去除了一些隱式操作,比如隱式型別轉換和隱式方法過載這兩個坑,乾的漂亮。

Swift的應用方向

我認為Swift主要有下面這兩個應用方向:

教育

我指的是程式設計教育。現有程式語言最大的問題就是互動性奇差,從而導致學習曲線陡峭。相信Swift及其互動性極強的程式設計環境能夠打破這個局面,讓更多的人——尤其是青少年,學會程式設計。

這裡有必要再次提到Brec VictorInventing on Principle,看了這個視訊你就會明白一個互動性強的程式設計環境能夠帶來什麼。

應用開發

現有的iOS和OS X應用開發均使用Objective-C,而Objective-C是一門及其繁瑣(verbose)且學習曲線比較陡峭的語言,如果Swift能夠提供一個同現有Obj-C框架的簡易互操作介面,我相信會有大量的程式設計師轉投Swift;與此同時,Swift簡易的語法也會帶來相當數量的其它平臺開發者。

總之,上一次某家大公司大張旗鼓的推出一門程式語言及其程式設計平臺還是在2000年(微軟推出C#),將近15年之後,蘋果推出Swift——作為開發者,我很高興能夠見證一門程式語言的誕生。

 

 

相關文章