本頁使用了標題或全文手工轉換

Swift (程式語言)

維基百科,自由的百科全書
跳至導覽 跳至搜尋
Swift
Swift logo with text.svg
編程範型範式物件導向泛函指令式組塊英語Block_(programming)結構化
設計者 克里斯·拉特納Apple
實作者 Apple
面市時間 2014
穩定版本
5.0[1]
( 2019年3月25日,​3個月前​(2019-03-25
型態系統 靜態、強型別類型推論
作業系統 macOSiOSwatchOStvOS
許可證 開放[2]
副檔名 .swift
網站 官方網站
啟發語言
Objective-CRustHaskellRubyPythonC#CLU[3],和D語言[4]

Swift程式語言,支援多編程範式編譯式,用來撰寫基於macOS/OS XiOSwatchOStvOS的軟體[5]。 蘋果公司於2014年在蘋果開發者年會(WWDC)發布了Swift程式語言。從設計上蘋果公司讓Swift與Objective-C共存在蘋果公司的作業系統[5]

歷史[編輯]

2010年7月,蘋果開發者工具部門總監克里斯·拉特納開始著手 Swift 程式語言的設計工作,以一年時間,完成基本架構後,他領導了一個設計團隊大力參與其中。Swift大約歷經4年的開發期,2014年6月發表。

蘋果宣稱Swift的特點是:快速、現代、安全、互動,而且明顯優於Objective-C語言。Swift以LLVM編譯,可以使用現有的CocoaCocoa Touch框架。Xcode Playgrounds功能是Swift為蘋果開發工具帶來的最大創新,該功能提供強大的互動效果,能讓Swift原始碼在撰寫過程中能即時顯示出其執行結果。拉特納本人強調,Playgrounds很大程度是受到布雷特·維克多英語Bret Victor理念的啟發。[6]

2015年6月8日,蘋果於WWDC2015上宣布,Swift將開放原始碼,包括編譯器標準庫[7]

2015年12月3日,蘋果宣布開源Swift,並支援Linux,蘋果在新網站swift.org和代管網站Github上開源了Swift,但蘋果的app store並不支援開源的Swift,只支援蘋果官方的Swift版本,官方版本會在新網站swift.org上定期與開源版本同步。[8][9]

特色[編輯]

Swift取消了Objective-C的指標和其他不安全存取的使用,捨棄了Objective C早期套用Smalltalk風格的語法,全面改為句點表示法(dot-notation)。Swift具備類型推導(type inference)。同時,它提供了類似C++、C#中的命名空間(namespace)、泛型(generic)、運算子多載(operator overloading)。Swift被簡單的形容為 「沒有C的Objective-C」(Objective-C without the C)。[10]

類型和變數[編輯]

在Cocoa與Cocoa Touch的環境下,許多共用的類都放在Foundation Kit庫下,這些類別包含了NSString 字串庫(使用 Unicode),還有集合類別 NSArray 與 NSDictionary。Objective-C 提供了語法糖的方式讓這些物件可以整合在同一個語言裡。例如NSString之間合併的表示法如下:

NSString *str = @"hello,";
str = [str stringByAppendingString:@" world"];

在Swift裡, 字串的累積可以用加法(+)運算元作為第一類物件(First-class citizen)的方式直接完成, 上述的例子可以簡化為

var str="hello"
str += "world"

[11]

過去Cocoa(以及Cocoa Touch)的架構總是被分成兩種版本,一種是可變的(mutable),也就是可以在執行時期(runtime)改變;另一種是不可變的(immutable),其初始值不可改變,例如NSArray與NSMutableArray就是陣列的兩種版本。Swift語言延續這個傳統,但簡化為使用 let 關鍵字去設定常數(constant variable)。可變的(Mutable)物件使用 var 關鍵字,不可變的物件則適用let關鍵字。Swift語言使用類似C#Javascript的var定義變數,但特性又不盡相同。Swift不直接指派初始值給變數,變數無預設值,因此使用var變數之前必須先初始化,不然將發生編譯時期的錯誤。

為了方便使用,Swift提供Optional類型來宣告nil-free references。宣告Optional只需要在類型後面加上問號(?)即可。一旦var變數宣告為Optional的,其初始值就會被預設為nil。Optional本質上是enum,定義了None和Some兩種類型,nil即是Optional.None。

函式庫、執行時期與部署[編輯]

Swift在 Mac OS 和 iOS 平台可以和 Objective-C 使用相同的執行時期(runtime),因此Swift 程式能執行在目前已存在的平台上,包括 iOS 6 和 OS X 10.8或更高的版本。[12] 更重要的, Swift 和 Objective-C 的程式碼可並存於同一程式碼, 這種延伸就如同 C 和 C++ 的關係一樣。

為了吸引開發人員和復用已存在的程式碼,Xcode 6允許在 app target 匯入 Objective-C 標頭檔供給 Swift 使用,通過 Objective-C 的橋接標頭檔(bridging header)來供給 Swift。當開發人員添加 Swift 檔案到現有的 Objective-C應用程式時,Xcode自動建立相應的標頭檔。例如,一個 Swift 類 "MyClass" 可用於 Objective-C 的方式為

#import "MyClass-Swift.h".[13]

記憶體管理[編輯]

Swift全面使用自動參照計數(ARC)來管理記憶體,取代Objective C的垃圾回收功能。在Objective-C中,強參照(strong reference)即為非ARC中的retain,而弱參照(weak reference)即為非ARC中的assign。為了解決迴圈參照的問題,Swift提供unowned,不能設定為optional types,不能加上問號(?)或驚嘆號(!)。

除錯以及其他元素[編輯]

Xcode的除錯機制針對Swift語言提供REPL(Read-Eval-Print Loop, 這是源自emacs的術語)環境,可以利用Swift語法來評估或於其他程式互動,使Swift編程具有類似PythonRuby帶有的互動性介面(Interactive Shell)。

類似 Objective-C之處[編輯]

  • 基本數值型別(numeric types)大致相同 (例如Int, UInt, Float, Double)
  • 大量的C 語言運算子被移出Swift, 與此同時引入了新運算子。
  • 大括號被用於群組陳述(group statements)。
  • 變數之賦值使用等於符號, 但比較則使用「連續兩個等於」(==)運算元。還有一個新的運算元,「連續三個等於」(===)被用來判斷常數或變數之間是否為同一物件之實例(instance)。
  • 中括號([], Square brackets)用於陣列的表示, 宣告陣例之後, 可以指派索引值(index)來進行元素(element)之存取。
  • 控制陳述(control statement), for, while, if, switch 與Objective-C都十分類似, 但有延伸功能, 像是 for in 用於集合(collection)的輪詢,switch 還可以接受非整數的cases條件值, 諸如此類。

不同於 Objective-C之處[編輯]

  • 陳述句(statement)不需要用分號(;)結束,但分號可以作為一行上兩個以上語句的分割符。
  • 不需要標頭檔(Header files)。
  • 註解方式 /* ... */ 巢狀,指注釋里可以再有注釋。
  • 強類型
  • 類型推論或隱含類型(Type inference)
  • 支援泛型編程
  • 函式成為第一等類型(first-class object),這意味著函式可以作為其他函式的參數和返回值。
  • 運算子多載。運算子可在類內重新定義。
  • 定義新的運算子。
  • 字串全方面支援 Unicode
  • 規避了C語言家族的易錯行為:
    • 不存在指標
    • 賦值語句(Assignments)沒有返回值。 避免將 if (i==0) ,誤寫成 if (i=0) ,造成編譯時期錯誤(compile-time error)。
    • switch 的區段內不需要使用 break 語句。另外,case後面都需要有可執行的程式碼(C或C++可連續使用多個case而不需要額外的程式碼),否則將觸發編譯錯誤。
    • 變數和常數必須初始化才能使用,而且陣列(array)的邊界必須明確確認。
    • 溢位(overflows)的問題。C語言沒有強制整數型別(signed integers)的界限,常常在觸發執行時期錯誤。Swift通過整數類型的max或min屬性取得最大值或最小值。

討論[編輯]

長達600多頁的 The Swift Programming Language 可以在iBooks免費下載。[14]

範例程式碼[編輯]

Swift不需要引入標頭檔(header file)或main()函数,不需要在每一行語句(statement)結尾加上分號。

變數聲明方式如下:

var implicitInteger = 70
var implicitDouble = 70.0
var explicitDouble: Double = 70

用 let 宣告常數方式如下:

let numberOfApples = 3
let numberOfOranges = 5
let appleSummary = "I have \(numberOfApples) apples."
let fruitSummary = "I have \(numberOfApples + numberOfOranges) pieces of fruit."

Swift不支援隱式類型轉換(implicitly casting),因此數值和字串之間必須顯式類型轉換(Explicitly casting):

let table = "The width of this table is "
let width = 100
let tableWidth = table + String(width)

以下是Hello World程式:

println("Hello, world")
print("Hello, world") /*Swift 2.0 之後不再使用println,改使用print*/

使用Unicode字元,例如在文字中放心添加有不同語言的文字:

let  =["新": 67, "青": 8, "玉": 33, "小小": 25]
for (名字, ) in  {
  println("\(名字)\() 歲。")
}

相關條目[編輯]

參考資料[編輯]

  1. ^ https://swift.org/download/#releases
  2. ^ "Apple will open-source its Swift programming language"
  3. ^ Lattner, Chris. Chris Lattner's Homepage. Chris Lattner. 2014-06-03 [2014-06-03]. I started work on the Swift Programming Language in July of 2010. I implemented much of the basic language structure, with only a few people knowing of its existence. A few other (amazing) people started contributing in earnest late in 2011, and it became a major focus for the Apple Developer Tools group in July 2013 [...] drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list. 
  4. ^ Building assert() in Swift, Part 2: __FILE__ and __LINE__ - Swift Blog -. Apple Developer. [2014-09-26]. Swift borrows a clever feature from the D language: these identifiers expand to the location of the caller when evaluated in a default argument list. 
  5. ^ 5.0 5.1 Apple announces Swift, a new programming language for iOS. 
  6. ^ 蘋果新編程語言Swift僅耗時4年完成開發. 網易科技報導. 2014-06-05. (原始內容存檔於2014-06-08). 
  7. ^ Swift 2.0 - Swift Blog. developer.apple.com. [2019-06-12] (美國英語). 
  8. ^ The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub, Apple, 2019-06-12 [2019-06-12] 
  9. ^ Inc, Apple. Swift.org. Swift.org. [2019-06-12] (英語). 
  10. ^ Weber, Harrison. Apple announces 『Swift,』 a new programming language for OS X & iOS. VentureBeat. 2014-06-02. 
  11. ^ "Strings and Characters", Apple Inc.
  12. ^ "Do Swift-based apps work on OS X 10.9/iOS 7 and lower?", StackOverflow
  13. ^ "Swift and Objective-C in the Same Project", Apple Inc.
  14. ^ The Swift Programming Language.

外部連結[編輯]