标签:
Swift (编程语言)
(重定向自Swift語言)
跳转至: 导航、 搜索
关于与“Swift (程式语言)”名称相近的条目,详见“swift”。
Swift
|
|
发行时间 |
2014 |
设计者 |
|
实现者 |
|
启发语言 |
|
专有 |
|
常用文件扩展名 |
.swift |
Swift,一种支持多编程范式,编译式编程语言,由苹果公司在2014年推出,用来撰写OS X和iOS应用程序[3]。2014年,在AppleWWDC所发布,设计Swift时,苹果公司有意让Swift与Objective-C共存在苹果公司的操作系统上[3]。
目录 [隐藏]
历史[编辑]
2010年7月,苹果开发者工具部门总监克里斯·拉特纳开始着手 Swift 编程语言的设计工作,以一年时间,完成基本架构后,他领导了一个设计团队大力参与其中。Swift大约历经4年的开发期,2014年6月发表。
苹果宣称Swift的特点是:快速、现代、安全、互动,而且明显优于Objective-C语言。Swift以LLVM编译,可以使用现有的Cocoa和Cocoa Touch框架。Xcode Playgrounds功能是Swift为苹果开发工具带来的最大创新,该功能提供强大的互动效果,能让Swift源代码在撰写过程中能实时显示出其运行结果。拉特纳本人强调,Playgrounds很大程度是受到布雷特·维克多(Bret Victor)理念的启发。[4]
特色[编辑]
Swift取消了Objective C的指针及其他不安全访问的使用,并舍弃Objective C早期应用Smalltalk之语法,全面改为句点表示法(dot-notation)。同许多脚本语言一样,Swift可以推断变量类型(var, variant)。同时,它提供了类似Java的名字空间(namespace)、泛型(generic)、运算对象重载(operator overloading)。Swift被简单的形容为 “没有C的Objective-C”(Objective-C without the C).[5]
类型与变量[编辑]
在Cocoa与Cocoa Touch的环境下,许多共用的类物都放在Foundation Kit库下,这些类包含了NSString 字符串库 (使用 Unicode), 还有集合类 NSArray 与 NSDictionary。Objective-C 提供了语法糖(syntactic sugar)的方式让这些对象可以集成在同一个语言里。例如NSString之间合并的表示法如下:
NSString *str = @"hello,"; str = [str stringByAppendingString:@" world"];
在Swift里, 字符串的累积可以用加法(+)运算对象作为第一级公民(First-class citizen)的方式直接完成, 上述的例子可以简化为
var str = "hello,"; str += " world"
[6]
过去Cocoa(以及Cocoa Touch)的架构总是被分成两种版本,一种是可变的(mutable),也就是可以在运行时期(runtime)改变;另一种是不可变的(immutable),其初始值不可改变,例如NSArray与NSMutableArray就是数组的两种版本。在Swift语言的世界里仍延续这个传统,但更简化为使用 let 关键字去设置常数(constant variable)。至于可变的(Mutable)对象则使用 var 关键字。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 平台可以和Object-C使用相同的运行时期(runtime)。这意味着Swift 程序可以运行于目前已存在的平台之上,包含 iOS 6 和 OS X 10.8 都可以运行Swift的程序.[7] 更重要的, Swift 和 Obj-C 的代码可并存于单一程序内, 这种延伸就如同C 和 C++ 的关系一样。
为了争取大量的开发人员并重复使用已存在的代码, Xcode 6 允许在app target导入Objective-C文件供给Swift使用,通过Objective-C的桥接头文件(bridging header)来暴露给 Swift。当开发人员添加 Swift 文件到现有的Objective-C应用程序时,Xcode 会自动创建这些头文件。例如, 一个Swift 知名的类 "MyClass" 可用于 Obj-C 的方式 #import "MyClass-Swift.h".[8]
存储器管理[编辑]
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之处[编辑]
不同于 Objective-C之处[编辑]
讨论[编辑]
JavaEye的创始人Robbin发表意见:“对程序员来说,熟悉Swift语法也不过一天时间足够了。关键是要提供高级数据类型,简化Cocoa类库,否则用不用Swift都没区别。”[9]
长达600多页的 The Swift Programming Language 可以在iBooks免费下载。[10]
示例程序[编辑]
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")
可以使用Unicode字符
let 人 = ["新": 67, "青": 8, "玉": 33, "小小": 25]
for (名字, 歲) in 人 {
println("\(名字)是\(歲) 歲。")
}
相关条目[编辑]
参考资料[编辑]
标签:
原文地址:http://my.oschina.net/gabriel1215/blog/372560