Swift 特点
# 一种强大但极易学习的编程语言
Swift 是一种强大直观的编程语言,适用于 macOS、iOS、watchOS 和 Apple tvOS 等。编写 Swift 代码的过程充满了乐趣和互动。Swift 语法简洁,但表现力强,更包含了开发者喜爱的现代功能。Swift 代码从设计上保证安全,同时还能开发出运行快如闪电的软件。
# 现代化
Swift 是编程语言的最新研究成果,并融合了构建 Apple 平台的数十年经验。命名参数以简洁的语法表示,让您能更轻松地阅读和维护以 Swift 编写的 API。您甚至无需键入分号。推断类型让代码更为简洁且不易出错;而模块则消除了标头,改为提供名称空间。为了给国际语言和表情符号提供最佳支持,字符串会保持 Unicode 正确性,并使用基于 UTF-8 的编码来优化各种用例中的性能。内存采用严谨的确定性引用计数来自动管理,最大程度地降低了内存使用量,且不会产生垃圾回收开销。
struct Player {
var name: String
var highScore: Int = 0
var history: [Int] = []
init(_ name: String) {
self.name = name
}
}
var player = Player("Tomas")
2
3
4
5
6
7
8
9
10
11
使用现代、简明的语法声明新类型。为实例属性提供默认值,并定义自定构造器。
extension Player {
mutating func updateScore(_ newScore: Int) {
history.append(newScore)
if highScore < newScore {
print("\(newScore)! A new high score for \(name)! 🎉")
highScore = newScore
}
}
}
player.updateScore(50)
// Prints "50! A new high score for Tomas! 🎉"
// player.highScore == 50
2
3
4
5
6
7
8
9
10
11
12
13
使用扩展向现有类型添加功能,并利用自定字符串插值减少样板代码。
extension Player: Codable, Equatable {}
import Foundation
let encoder = JSONEncoder()
try encoder.encode(player)
print(player)
// Prints "Tomas, games played: 1, high score: 50”
2
3
4
5
6
7
8
快速扩展您的自定类型,以充分利用强大的语言功能,如自动 JSON 编码和解码。
let players = getPlayers()
// Sort players, with best high scores first
let ranked = players.sorted(by: { player1, player2 in
player1.highScore > player2.highScore
})
// Create an array with only the players’ names
let rankedNames = ranked.map { $0.name }
// ["Erin", "Rosana", "Tomas"]
2
3
4
5
6
7
8
9
10
使用简化闭包执行强大的自定转换。
正是这些富有前瞻性的概念,成就了这种有趣又易用的编程语言。
Swift 还有许多其他功能,可以让您的代码更富表现力:
- 泛型强大且易用
- 协议扩展使得泛型代码编写变得更为容易
- 头等函数和轻量级闭包语法
- 对范围或集合进行快速、简洁的迭代
- 元组和多值返回
- 支持方法、扩展和协议的结构
- 枚举能执行有效负载并支持模式匹配
- 函数式编程模式,例如映射和过滤
- 使用 try/catch/throw 处理原生错误
# 从设计上确保安全
Swift 可避免全部类型的不安全代码。变量在使用前会始终先进行初始化,数组和整数会进行溢出检查,内存将实现自动管理,强制式独占访问内存功能亦可防范很多编程错误。语法经过调整,让您可轻松定义目标意图。例如,只需三个字符的关键词就可定义变量 (var) 或常量 (let)。此外,Swift 充分利用值类型,特别是针对 Array 和 Dictionary 等常用类型。这让您在拷贝这种类型的内容时,能放心它不会在其他位置被修改。
默认情况下,Swift 对象不能定为 nil——这在另一方面保证了 Swift 的安全性。实际上,Swift 编译器会在您尝试创建或使用 nil 对象时显示编译时错误,阻止您继续操作。这使得代码编写变得更简洁、更安全,并且可以防止 app 中出现大规模的运行时崩溃。但是,在某些情况下,运用 nil 是适当合理的。针对这类情况,Swift 提供了一项创新功能,称为“可选类型”。可选类型可以包含 nil,但是 Swift 语法会强制要求您使用 ? 语法来安全地处理 nil。使用该语法,等于向编译器表明您理解此行为并将安全地进行处理。
extension Collection where Element == Player {
// Returns the highest score of all the players,
// or `nil` if the collection is empty.
func highestScoringPlayer() -> Player? {
return self.max(by: { $0.highScore < $1.highScore })
}
}
2
3
4
5
6
7
无论函数会不会返回实例,都可以使用可选类型。
if let bestPlayer = players.highestScoringPlayer() {
recordHolder = """
The record holder is \(bestPlayer.name),\
with a high score of \(bestPlayer.highScore)!
"""
} else {
recordHolder = "No games have been played yet.")
}
print(recordHolder)
// The record holder is Erin, with a high score of 271!
let highestScore = players.highestScoringPlayer()?.highScore ?? 0
// highestScore == 271
2
3
4
5
6
7
8
9
10
11
12
13
凭借可选类型绑定、可选链和 nil 合并等功能,您可以安全、高效地使用可选类型值。
# 快速而强大
最初构思时,我们就希望 Swift 实现快速运行的效果。利用出色的高性能 LLVM 编译器技术,Swift 代码会转换为经过优化的、可充分利用现代硬件的原生代码。此外,语法和标准资料库也进行了调整,使最浅显的编码方式也能有最佳表现,无论它是在您腕上的手表上运行,还是跨一组服务器运行。
Swift 是在 C 语言和 Objective-C 语言的基础上开发的全新编程语言。它包含诸如类型、流控制和运算符等底层基元。此外,它还提供面向对象的特性,例如类、协议和泛型,为 Cocoa 和 Cocoa Touch 开发者提供了他们所需的性能和功能。
# 首门编程语言的绝佳选择
Swift 能为您打开通往编程世界的大门。事实上,我们的设计初衷也是希望它能成为任何人的第一门编程语言——无论您是在求学阶段,还是准备开拓全新的职业生涯。对于教育工作者而言,Apple 编写了免费的课程,帮助他们在课堂内外教授 Swift。首次学习编程的用户可以下载 Swift Playgrounds,这是一款能让您的 Swift 代码入门学习充满互动和乐趣的 iPad 版 app 。
有志于此的 app 开发者可以访问免费的课程,学习如何在 Xcode 中构建他们的首个 app。我们在世界各地的 Apple Store 商店都提供有“Today at Apple 编程与 App”课程,您可以在这些课程中动手体验 Swift 代码的实际操作。
# 源代码和二进制文件兼容性
Swift 5 并不要求您先对 Swift 4 代码做任何修改,才能使用新版编译器。您可以先使用新的编译器,然后按照自己的进度每次一个模块地进行迁移,利用 Swift 5 的新功能。另外,现在 Swift 5 针对 app 引入了二进制文件兼容功能。从今往后每个 OS 版本中都将内建 Swift 资料库,您不再需要在今后 OS 版本的 app 中内建 Swift 资料库。您的 app 将利用 OS 中的最新版资料库,您的代码也无需重新编译即可继续运行。这不仅可以简化 app 开发过程,而且还能缩减 app 的大小和启动时间。
# 开源
Swift 以开源形式在 Swift.org 上开发而成,其源代码、bug 跟踪器、论坛和常规开发版本将对所有人公开。在这个由众多开发者组成的广泛社区中,Apple 内部员工与成百上千位外部贡献者携手合作,让 Swift 愈加出色。该社区还会提供更多博客、播客、会议和聚会,让社区中的开发者分享有关如何发挥 Swift 巨大潜能的经验。
# 跨平台
Swift 已能够支持所有 Apple 平台和 Linux,社区成员正积极地努力将 Swift 移植到更多平台上。借助 SourceKit-LSP,社区成员还在努力将 Swift 支持集成到各种开发者工具中。我们非常期待看到 Swift 以更多元的方式构建更安全、更快速的软件,同时也让编程变得更有趣。
# Swift 适用于服务器
Swift 不仅能够为 Apple 平台开发很多新 app,而且还适用于一系列新的现代化服务器 app。Swift 非常适合用于需要运行时安全、编译性能和较小内存占用空间的服务器 app。为了把握使用 Swift 开发和部署服务器 app 的方向,Swift 社区成立了 Swift Server 工作组。该工作组为此而推出的首个产品为 SwiftNIO,这是一款跨平台的异步事件驱动型网络应用程序框架,适用于高性能协议服务器和客户端。它是构建其他面向服务器的工具和技术的基础,包括正在积极开发的日志记录、指标和数据库驱动程序。
要进一步了解 Swift 开源社区和 Swift Server 工作组,请访问 Swift.org (英文)
# Playground 和 Read-Eval-Print-Loop (REPL)
与 iPad 上的 Swift Playgrounds 类似,Xcode 中的 Playground 让编写 Swift 代码变得非常简单有趣。键入一行代码,就能马上看到结果。您可以从代码处快速查看结果,或将结果直接固定在这行代码下方。结果视图可以显示图形、结果列表或某个值随时间而变化的图形。您可以打开“时间轴助理”来观看复杂的视图演变和动画效果 (非常适合用于试验新的 UI 代码),或是在您编码时播放 SpriteKit 动画场景。在 playground 中优化好代码后,即可将代码移到您的项目中。当您在终端或 Xcode 的 LLDB 调试控制台中使用 Swift 时,它也具有互动性。您可以使用 Swift 语法来评估现有 app 并与它互动,也可以编写新的代码来查看它在脚本式环境中的运作情况。
# Package Manager
Swift Package Manager 是一个跨平台工具,可用于构建、运行、测试和打包 Swift 资料库和可执行文件。Swift 软件包是向 Swift 社区分发资料库和源代码的最佳方法。软件包的配置采用 Swift 编写,可以让您轻松配置目标、声明产品和管理软件包依赖项。Swift 5 中有一项新功能:运行命令现在无需构建可执行文件,即可在 REPL 中导入资料库。实际上,Swift Package Manager 本身就采用 Swift 构建,也作为软件包内建在 Swift 开源项目中。
# Objective-C 互操作性
您可以立即使用 Swift 创建全新的 app,或开始使用 Swift 代码在您的 app 中实施新的特性和功能。Swift 代码可以与您现有的 Objective-C 文件在同一个项目中共存,并可完全访问 Objective-C API,让您能轻松地采用这些文件。
# 入门资源
下载 Xcode,并通过相关文档和示例代码学习如何用 Swift 来构建 app。