fbpx
维基百科

Swift (程式語言)

Swift編程語言,支持多编程范式編譯式,用来撰写基于macOS/OS XiOSiPadOSwatchOStvOS的软件[7]。 苹果公司于2014年在苹果开发者年会(WWDC)發布了Swift编程语言。从设计上苹果公司让Swift与Objective-C共存在苹果公司的操作系统[7]

Swift
编程范型範式物件導向泛函指令式組塊英语Block_(programming)結構化
設計者克里斯·拉特納蘋果公司
實作者蘋果公司
发行时间2014年6月2日,​8年前​(2014-06-02[1]
目前版本
  • 5.8 (2023年3月30日;穩定版本)[2]
型態系統靜態、強型別類型推論
操作系统蘋果公司的操作系統(Darwin, iOS, iPadOS, macOS, tvOS, watchOS), Linux, Windows 10, Android
許可證Apache許可證2.0(Swift 2.2及以後版本)
專有(直到Swift 2.2)[3][4]
文件扩展名.swift
網站
  • www.swift.org
  • developer.apple.com/swift/
啟發語言
Objective-CRustHaskellRubyPythonC#CLU[5],和D語言[6]

歷史

2010年7月,苹果开发者工具部门总监克里斯·拉特納开始着手 Swift 编程语言的設計工作,以一年時間,完成基本架構後,他領導了一個設計團隊參與其中。Swift大約歷經4年的開發期,2014年6月發表。

苹果宣称Swift的特点是:快速、现代、安全、互动,而且明顯優於Objective-C语言。Swift以LLVM編譯,可以使用现有的CocoaCocoa Touch框架。Xcode Playgrounds功能是Swift为苹果开发工具带来的最大创新,该功能提供強大的互动效果,能让Swift源代碼在撰寫过程中能即時显示出其執行結果。拉特纳本人强调,Playgrounds很大程度是受到布雷特·维克多英语Bret Victor理念的启发。[8]

2015年6月8日,蘋果於WWDC2015上宣布,Swift將開放原始碼,包括编译器标准库[9]

2015年12月3日,蘋果宣布開源Swift,並支持Linux,蘋果在新網站swift.org和託管網站Github上開源了Swift,但蘋果的App Store並不支持開源的Swift,只支持蘋果官方的Swift版本,官方版本會在新網站swift.org上定期與開源版本同步。[10][11]

特色

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)。[12]

類型和變量

在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" 

[13]

過去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或更高的版本。[14] 更重要的, 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".[15]

内存管理

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語言家族的易错行为:
    • 不存在指针
    • 赋值语句没有返回值。若将if (i==0)誤寫成if (i=0),将造成编译時期錯誤。
    • switch 的区块内不需要使用 break 语句。另外,case后面都需要有可执行的代码(C或C++可連續使用多個case而不需要額外的代碼),否则将触发编译错误。
    • 变量和常量必须初始化才能使用,而且数组(array)的边界必须明确確認。
    • 溢位(overflows)的問題。C語言沒有強制整數型別(signed integers)的界限,常常在触发执行时期错误。Swift通过整数类型的max或min属性获取最大值或最小值。

讨论

長達600多頁的 The Swift Programming Language 可以在iBooks免费下载。[16]

范例代码

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  { print("\(名字)\() 歲。") } 

相关条目

参考资料

  1. ^ . Apple. September 9, 2014 [March 8, 2015]. (原始内容存档于2016-07-11). 
  2. ^ 2.0 2.1 Release 5.8. 2023年3月30日 [2023年4月3日]. 
  3. ^ . [2022-04-09]. (原始内容存档于2022-01-08). Swift is proprietary and closed: It is entirely controlled by Apple and there is no open source implementation. 
  4. ^ Lattner, Chris. . June 11, 2014 [June 12, 2014]. (原始内容存档于2014-07-14). You can imagine that many of us want it to be open source and part of LLVM, but the discussion hasn't happened yet, and won't for some time. 
  5. ^ Lattner, Chris. . Chris Lattner. 2014-06-03 [2014-06-03]. (原始内容存档于2015-12-22). 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. 
  6. ^ Building assert() in Swift, Part 2: __FILE__ and __LINE__ - Swift B log -. Apple Developer. [2014-09-26]. (原始内容于2015-11-21). 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. 
  7. ^ 7.0 7.1 Apple announces Swift, a new programming language for iOS. (原始内容于2015-12-26). 
  8. ^ 苹果新编程语言Swift仅耗时4年完成开发. 网易科技报道. 2014-06-05. (原始内容于2014-06-08). 
  9. ^ Swift 2.0 - Swift Blog. developer.apple.com. [2019-06-12]. (原始内容于2019-06-06) (美国英语). 
  10. ^ The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub, Apple, 2019-06-12 [2019-06-12], (原始内容于2019-06-12) 
  11. ^ Inc, Apple. Swift.org. Swift.org. [2019-06-12]. (原始内容于2019-06-15) (英语). 
  12. ^ Weber, Harrison. Apple announces ‘Swift,’ a new programming language for OS X & iOS. VentureBeat. 2014-06-02 [2014-06-10]. (原始内容于2016-11-17). 
  13. ^ "Strings and Characters" (页面存档备份,存于互联网档案馆), Apple Inc.
  14. ^ "Do Swift-based apps work on OS X 10.9/iOS 7 and lower?" (页面存档备份,存于互联网档案馆), StackOverflow
  15. ^ "Swift and Objective-C in the Same Project" (页面存档备份,存于互联网档案馆), Apple Inc.
  16. ^ The Swift Programming Language (页面存档备份,存于互联网档案馆).

外部链接

swift, 程式語言, 关于与, 標題相近或相同的条目, 請見, swift, swift編程語言, 支持多编程范式和編譯式, 用来撰写基于macos, ipados, watchos和tvos的软件, 苹果公司于2014年在苹果开发者年会, wwdc, 發布了swift编程语言, 从设计上苹果公司让swift与objective, c共存在苹果公司的操作系统上, swift编程范型多範式, 物件導向, 泛函, 指令式, 組塊, 英语, block, programming, 結構化, 設計者克里斯, 拉特納與蘋. 关于与 Swift 程式語言 標題相近或相同的条目 請見 swift Swift編程語言 支持多编程范式和編譯式 用来撰写基于macOS OS X iOS iPadOS watchOS和tvOS的软件 7 苹果公司于2014年在苹果开发者年会 WWDC 發布了Swift编程语言 从设计上苹果公司让Swift与Objective C共存在苹果公司的操作系统上 7 Swift编程范型多範式 物件導向 泛函 指令式 組塊 英语 Block programming 結構化 設計者克里斯 拉特納與蘋果公司實作者蘋果公司发行时间2014年6月2日 8年前 2014 06 02 1 目前版本5 8 2023年3月30日 穩定版本 2 型態系統靜態 強型別 類型推論操作系统蘋果公司的操作系統 Darwin iOS iPadOS macOS tvOS watchOS Linux Windows 10 Android許可證Apache許可證2 0 Swift 2 2及以後版本 專有 直到Swift 2 2 3 4 文件扩展名 swift網站www wbr swift wbr org developer wbr apple wbr com wbr swift wbr 啟發語言Objective C Rust Haskell Ruby Python C CLU 5 和D語言 6 目录 1 歷史 2 特色 2 1 類型和變量 2 2 函数库 执行时期与部署 2 3 内存管理 2 4 除錯以及其他元素 2 5 类似 Objective C之处 2 6 不同于 Objective C之处 3 讨论 4 范例代码 5 相关条目 6 参考资料 7 外部链接歷史 编辑2010年7月 苹果开发者工具部门总监克里斯 拉特納开始着手 Swift 编程语言的設計工作 以一年時間 完成基本架構後 他領導了一個設計團隊參與其中 Swift大約歷經4年的開發期 2014年6月發表 苹果宣称Swift的特点是 快速 现代 安全 互动 而且明顯優於Objective C语言 Swift以LLVM編譯 可以使用现有的Cocoa和Cocoa Touch框架 Xcode Playgrounds功能是Swift为苹果开发工具带来的最大创新 该功能提供強大的互动效果 能让Swift源代碼在撰寫过程中能即時显示出其執行結果 拉特纳本人强调 Playgrounds很大程度是受到布雷特 维克多 英语 Bret Victor 理念的启发 8 2015年6月8日 蘋果於WWDC2015上宣布 Swift將開放原始碼 包括编译器和标准库 9 2015年12月3日 蘋果宣布開源Swift 並支持Linux 蘋果在新網站swift org和託管網站Github上開源了Swift 但蘋果的App Store並不支持開源的Swift 只支持蘋果官方的Swift版本 官方版本會在新網站swift org上定期與開源版本同步 10 11 特色 编辑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 12 類型和變量 编辑 在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 13 過去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或更高的版本 14 更重要的 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 15 内存管理 编辑 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 與Objective C都十分類似 但有延伸功能 像是 for in 用於集合 collection 的輪詢 switch 還可以接受非整數的cases條件值 諸如此類 不同于 Objective C之处 编辑 陳述句 statement 不需要用分号 結束 但分号可以作为一行上两个以上语句的分割符 不需要头文件 Header files 注解方式 嵌套 指注释里可以再有注释 強类型 类型推论或隐含类型 Type inference 支持泛型編程 函数成为第一等类型 first class object 这意味着函数可以作为其他函数的参数和返回值 运算符重载 运算符可在类內重新定义 定义新的运算符 字符串全方面支持 Unicode 规避了C語言家族的易错行为 不存在指针 赋值语句没有返回值 若将if i 0 誤寫成if i 0 将造成编译時期錯誤 在switch 的区块内不需要使用 break 语句 另外 case后面都需要有可执行的代码 C或C 可連續使用多個case而不需要額外的代碼 否则将触发编译错误 变量和常量必须初始化才能使用 而且数组 array 的边界必须明确確認 溢位 overflows 的問題 C語言沒有強制整數型別 signed integers 的界限 常常在触发执行时期错误 Swift通过整数类型的max或min属性获取最大值或最小值 讨论 编辑長達600多頁的 The Swift Programming Language 可以在iBooks免费下载 16 范例代码 编辑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 人 print 名字 是 歲 歲 相关条目 编辑Objective C C语言参考资料 编辑 Swift Has Reached 1 0 Apple September 9 2014 March 8 2015 原始内容存档于2016 07 11 2 0 2 1 Release 5 8 2023年3月30日 2023年4月3日 Swift Objectively 2022 04 09 原始内容存档于2022 01 08 Swift is proprietary and closed It is entirely controlled by Apple and there is no open source implementation Lattner Chris Re LLVMdev cfe dev Advertisement open positions in Apple s Swift compiler team June 11 2014 June 12 2014 原始内容存档于2014 07 14 You can imagine that many of us want it to be open source and part of LLVM but the discussion hasn t happened yet and won t for some time Lattner Chris Chris Lattner s Homepage Chris Lattner 2014 06 03 2014 06 03 原始内容存档于2015 12 22 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 Building assert in Swift Part 2 FILE and LINE Swift B log Apple Developer 2014 09 26 原始内容存档于2015 11 21 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 7 0 7 1 Apple announces Swift a new programming language for iOS 原始内容存档于2015 12 26 苹果新编程语言Swift仅耗时4年完成开发 网易科技报道 2014 06 05 原始内容存档于2014 06 08 Swift 2 0 Swift Blog developer apple com 2019 06 12 原始内容存档于2019 06 06 美国英语 The Swift Programming Language Contribute to apple swift development by creating an account on GitHub Apple 2019 06 12 2019 06 12 原始内容存档于2019 06 12 Inc Apple Swift org Swift org 2019 06 12 原始内容存档于2019 06 15 英语 Weber Harrison Apple announces Swift a new programming language for OS X amp iOS VentureBeat 2014 06 02 2014 06 10 原始内容存档于2016 11 17 Strings and Characters 页面存档备份 存于互联网档案馆 Apple Inc Do Swift based apps work on OS X 10 9 iOS 7 and lower 页面存档备份 存于互联网档案馆 StackOverflow Swift and Objective C in the Same Project 页面存档备份 存于互联网档案馆 Apple Inc The Swift Programming Language 页面存档备份 存于互联网档案馆 外部链接 编辑官方网站 苹果开发者上的Swift 页面存档备份 存于互联网档案馆 iOS Example 页面存档备份 存于互联网档案馆 GitHub上的Swift源代码 取自 https zh wikipedia org w index php title Swift 程式語言 amp oldid 74933109, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。