For the complete documentation index, see llms.txt. This page is also available as Markdown.

Swift 编程语言

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 install

Swift 使用定制版的 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 等编程语言。

最后更新于