2014年,在AppleWWDC所發布,設計Swift時,蘋果公司有意讓Swift與Objective-C
共存在蘋果公司的作業系統上。
記憶體管理[編輯]
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編程具有類似Python與Ruby互動性介面(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
與Ojbective-C都十分類似, 但有延伸功能, 像是for in
用於集合(collection)的輪詢,switch
還可以接受非整數的cases條件值, 諸如此類。
不同於 Objective-C之處[編輯]
- 陳述句(statement)不須再使用分號 (';')做為結束, 但分號還是可以在一行以內作為兩個以上陳述的分隔。
- 標頭檔(Header files)不再需要。
- 註解方式 /* ... */ 可以為巢狀(nested)註解, 意思是指註解內可以再有註解, 過去有些C或C++編譯器不支援巢狀註解。
- 強型別(strong type)
- 類型推論或隱含類型(Type inference)
- 支援泛型編程。
- 函式為第一等類型(first-class object),這意味著函式可以作為其他函式的參數與返回值。
- 運算元可在類別內重新定義 (運算元重載)。可以生成新的運算元。
- 字串全方面支援 Unicode。某些字元甚至可以成為語言的名稱。
- 許多C語言家族過去惡名昭彰的怪語法(error-prone behaviors)也被改變:
- 不再存在指標。
- 指派(Assignments)不再回傳值。正確寫法是
if (i==0)
,一般容易誤寫成if (i=0)
會造成編譯時期錯誤(compile-time error)。 - 在
switch
的區塊內不需要再使用break
敘述句。另外, case後面都需要有可執行的代碼(C或C++可連續使用多個case而不需要額外的代碼), 否則會發生編譯錯誤。 - 變數和常數都要被初始化,而且陣列(array)的界限也要確認清楚。
- 溢位(overflows)的問題。C語言沒有強制整數型別(signed integers)的界限, 常常在執行時間發生問題。Swift可以透過整數型別的max或min屬性取得最大值或最小值。
資料來源:
沒有留言:
張貼留言