Swift 编程语言
作者:Steve Wills
Swift 是 Apple 推出的新通用编程语言,于 2014 年 Apple 年度 WWDC 活动上发布,2015 年以 Apache 许可证 2.0 版开源。它旨在替代 Objective C,但更简洁、更安全,也确已如此。Swift 主要面向 iOS 应用开发,但它是一门完整的通用系统编程语言,可用于多种任务。它正在快速发展,可移植到多种操作系统。Swift 全面支持 Unicode。它易学、好用、运行快。Swift 支持命令式与面向对象编程、泛型、扩展、try/throw/catch 错误处理、动态分派、可扩展编程与晚绑定。
安全性
内存自动管理,无需手动分配或释放,避免相关错误。作为使编程更安全的设计目标之一,Swift 在很大程度上不向开发者暴露指针,但需要时也可使用。它要求变量使用前先声明,避免脚本语言中有时出现的隐式声明问题。为简洁起见,类型可推断;为安全与清晰起见,也可显式声明。为安全起见,数据类型严格强制;为灵活起见,类型也可轻松转换。
对符号(变量、函数、类等)支持五种访问控制:
private——仅在直接作用域内可访问
fileprivate——同一文件内的任何代码都可访问
internal——同一模块内的任何代码都可访问
public——可从任何模块访问
open——可在模块外被继承(仅限类与方法)
这些访问控制不受继承影响,允许显式控制代码与数据的使用位置,避免意外与棘手的故障排查。
在 FreeBSD 上构建
首先确保你有 FreeBSD 11 与最新的 FreeBSD Ports 树。然后:
cd /usr/ports/lang/swift ; make installSwift 使用定制版的 llvm、clang、lldb、cmark、llbuild,因此构建要花些时间。之后应可运行 swift 命令并获得交互式提示符。你也可以保存 Swift 文件并调用 Swift 解释器。
缺什么?
Swift 既可解释也可编译,但目前 FreeBSD 上只有解释器可用。撰文时,Port lang/swift 为 2.2.1 版,而 Swift 最新版本为 3.0.1。更新 Port 与启用编译器的工作正在进行。Swift 教程往往围绕编写 iOS 应用展开,但这些应用所需的库属于 iOS,目前只在 iOS 上可用。因此 FreeBSD 上只有 Swift 核心语言可用。
Hello, World!
像任何编程语言一样,我们在 Swift 中写的第一个程序就是打印“Hello, World”。Swift 中只需:
在解释器中输入时如下:
Swift 行末不要求分号,但允许:
这让代码易于阅读,同时允许开发者想多简洁就多简洁。
变量与常量
变量必须在使用前声明:
再次,简洁性得以体现,因为允许开发者跳过变量类型声明——Swift 已自动判断出 message 是字符串。当然,在需要或希望处也可声明变量类型:
糟糕,我们忘了消息的一部分。补上:
简洁性再次体现——简单的字符串拼接即可。我们也可指定常量:
常量不能修改:
这服务于安全目标——允许程序员在必要时把某些值标为只读。错误消息清楚指出想改时该如何下手。
类型
Swift 提供所有 C 与 Objective-C 类型,包括 Int、Double、Float、Bool 与处理文本的 string。
类型强制再次服务于安全:
但类型也可轻松转换,灵活方便:
Swift 让数字更易读:
简洁性再次体现——Swift 允许一次为多个变量赋值:
此外,Swift 提供 Array、Set、Dictionary、Ranges、Tuples:
Swift 还引入了创新概念 Optionals,即值可能存在也可能不存在的变量:
Swift 推断 actualNumber 可能含也可能不含数字,而非要求我们指定。用“!”操作符取值:
但为安全起见,使用前必须检查值是否存在:
因此必须这样写:
类型安全
与 C 不同,赋值操作符不返回值,因此这里给出漂亮错误消息,再次保护我们免于低级笔误:
而且贴心建议了必要修改。类似地,整数不能用作布尔值:
加上变量使用前必须声明的要求,这些约束消除了若干类常见错误。
控制流
Swift 有常见的控制流机制:条件用 if 与 switch,循环用 for 与 while:
函数
Swift 函数使用具名参数,使代码更易读、易维护,不过在 Swift 2.x 中第一个名字必须省略。函数可返回也可不返回值。看这段示例代码:
将其保存为 multihello.swift 并运行:
通过“...”支持可变参数函数:
支持函数嵌套:
函数是一等类型,可从其他函数返回:
类
Swift 也是面向对象的。类可以这样声明:
结语
Swift 还有更多内容,鼓励大家试一试。网上有许多学习 Swift 的好资源:
甚至有几个允许你通过浏览器在线运行代码的网站:
STEVE WILLS 是居住在北卡罗来纳州的丈夫与父亲。他是 FreeBSD Ports 提交者,专注 Ruby 等编程语言。
最后更新于