Swift (编程语言)

以下摘自维基百科,讲解的还蛮全面。

(重定向自Swift語言

跳转至: 导航、 搜索

关于与“Swift (程式语言)”名称相近的条目,详见“swift”。

Swift


编程范型


范式面向对象泛函指令式组块结构化


发行时间


2014


设计者


克里斯·拉特纳Apple


实现者


Apple


型态系统


静态强类型类型推论


启发语言


Objective-CRustHaskellRubyPythonC#CLU[1],和D语言[2]


操作系统


OS X, iOS


许可证


专有


常用文件扩展名


.swift


网站


官方网站

Swift,一种支持多编程范式编译式编程语言,由苹果公司在2014年推出,用来撰写OS XiOS应用程序[3]。2014年,在AppleWWDC所发布,设计Swift时,苹果公司有意让Swift与Objective-C共存在苹果公司的操作系统[3]

目录  [隐藏]

  • 1 历史
  • 2 特色
    • 2.1 类型与变量
    • 2.2 库、运行时期与部署
    • 2.3 存储器管理
    • 2.4 除错以及其他元素
    • 2.5 类似 Objective-C之处
    • 2.6 不同于 Objective-C之处
  • 3 讨论
  • 4 示例程序
  • 5 相关条目
  • 6 参考资料

历史[编辑]

2010年7月,苹果开发者工具部门总监克里斯·拉特纳开始着手 Swift 编程语言的设计工作,以一年时间,完成基本架构后,他领导了一个设计团队大力参与其中。Swift大约历经4年的开发期,2014年6月发表。

苹果宣称Swift的特点是:快速、现代、安全、互动,而且明显优于Objective-C语言。Swift以LLVM编译,可以使用现有的CocoaCocoa 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编程具有类似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 与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属性获取最大值或最小值。

讨论[编辑]

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

}

相关条目[编辑]

参考资料[编辑]

  1. ^ Lattner, Chris. Chris Lattner‘s Homepage. Chris Lattner. June 3, 2014 [June 3, 2014]. "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."
  2. ^ Building assert() in Swift, Part 2: __FILE__ and __LINE__ - Swift Blog -. Apple Developer. [26 September 2014]. "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."
  3. ^ 3.0 3.1 Apple announces Swift, a new programming language for iOS.
  4. ^ 苹果新编程语言Swift仅耗时4年完成开发
  5. ^ Weber, Harrison. Apple announces ‘Swift,’ a new programming language for OS X & iOS. VentureBeat. June 2, 2014.
  6. ^ "Strings and Characters", Apple Inc.
  7. ^ "Do Swift-based apps work on OS X 10.9/iOS 7 and lower?", StackOverflow
  8. ^ "Swift and Objective-C in the Same Project", Apple Inc.
  9. ^ 范凯robbin
  10. ^ The Swift Programming Language.
时间: 2024-10-13 01:06:24

Swift (编程语言)的相关文章

Apple Swift编程语言新手教程

Apple Swift编程语言新手教程 作者: 日期: gashero 2014-06-03 FROM:http://gashero.iteye.com/blog/2075324 文件夹 1   简单介绍 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的

《Swift编程语言》中文翻译及读书笔记page25

The Swift Programming Language读书笔记学习笔记 第25页 本页主要说在swift语言里可以使用分号,但分号不作为每条swift语言语句的结尾 而是间隔写在一行的多条swift语句. eg: var x = 194 var y = 184 var z = 7311 上边三行swift语句可写成一行 var x = 194, y = 184, z = 7311 在本页还提及了swift里的int数据,这和其他语言里int整形数据没啥区别. 特别之处1)提及了UInt8

Swift编程语言学习2.2——基本运算符(下)

三元条件运算(Ternary Conditional Operator) 三元条件运算的特殊在于它是有三个操作数的运算符,它的原型是问题?答案1:答案2.它简洁地表达根据问题成立与否作出二选一的操作.如果问题成立,返回答案1的结果; 如果不成立,返回答案2的结果. 使用三元条件运算简化了以下代码: if question: { answer1 } else { answer2 } 这里有个计算表格行高的例子.如果有表头,那行高应比内容高度要高出50像素; 如果没有表头,只需高出20像素. let

Swift编程语言学习1.5——类型别名、布尔值、元组

类型别名 类型别名(type aliases)就是给现有类型定义另一个名字.你可以使用typealias关键字来定义类型别名. 当你想要给现有类型起一个更有意义的名字时,类型别名非常有用.假设你正在处理特定长度的外部资源的数据: typealias AudioSample = UInt16 定义了一个类型别名之后,你可以在任何使用原始名的地方使用别名: var maxAmplitudeFound = AudioSample.min // maxAmplitudeFound 现在是 0 本例中,A

Swift编程语言学习1.6——可选值

可选值 使用可选(optionals)来处理值可能缺失的情况.可选表示: 有值,等于 x   或者没有值 注意: C 和 Objective-C 中并没有可选这个概念.最接近的是 Objective-C 中的一个特性,一个方法要不返回一个对象要不返回nil,nil表示"缺少一个合法的对象".然而,这只对对象起作用--对于结构体,基本的 C 类型或者枚举类型不起作用.对于这些类型,Objective-C 方法一般会返回一个特殊值(比如NSNotFound)来暗示值缺失.这种方法假设方法的

Swift编程语言学习1.7——断言

断言 可选可以让你判断值是否存在,你可以在代码中优雅地处理值缺失的情况.然而,在某些情况下,如果值缺失或者值并不满足特定的条件,你的代码可能并不需要继续执行.这时,你可以在你的代码中触发一个断言(assertion)来结束代码运行并通过调试来找到值缺失的原因. 使用断言进行调试 断言会在运行时判断一个逻辑条件是否为true.从字面意思来说,断言"断言"一个条件是否为真.你可以使用断言来保证在运行其他代码之前,某些重要的条件已经被满足.如果条件判断为true,代码运行会继续进行:如果条件

Swift编程语言学习——常量与变量

常量和变量把一个名字(比如maximumNumberOfLoginAttempts或者welcomeMessage)和一个指定类型的值(比如数字10或者字符串"Hello")关联起来.常量的值一旦设定就不能改变,而变量的值可以随意更改. 声明常量和变量 常量和变量必须在使用前声明,用let来声明常量,用var来声明变量.下面的例子展示了如何用常量和变量来记录用户尝试登录的次数: let maximumNumberOfLoginAttempts = 10 var currentLogin

苹果Swift编程语言入门教程【中文版】

目录 1 简介 2 Swift入门 3 简单值 4 控制流 5 函数与闭包 6 对象与类 7 枚举与结构 1 简介 Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束.Swift采用了安全的编程模式和添加现代的功能来是的编程更加简 单.灵活和有趣.界面则基于广受人民群众爱戴的Cocoa和Cocoa Touch框架,展示了软件开发的新方向. Swift已经存在了多年.Apple基于已有的编译器.调试器.框架作为其基础架构.通过ARC(Aut

Swift编程语言(中文版)官方手册翻译(第一部分)

独立翻译,进度会比较慢.等不及的可以看CocoaChina翻译小组,他们也正在组织翻译,而且人手众多,相信会提前很多完成翻译.当然质量就见仁见智了.原文可以在iTunes免费下载 目前进度 4 JUN 2014:6.5 % 前言 今天Apple发布了新的编程语言Swift,也提供了一本将近400页的 The Swift Programming Language(Swift编程语言).虽然我没有开发者账号,没法实际上机练习Swift代码,但这不影响我阅读这本书,以及用铅笔在纸上运行这些小程序.Ap

Apple Swift编程语言入门中文教程

Apple Swift编程语言入门教程 目录 1   简介 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简介 今天凌晨Apple刚刚发布了Swift编程语言,本文从其发布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS&OSX开发有所帮助. Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束.S