Swift

一种强大且易学的编程语言。

Swift 是一种强大直观的编程语言,适用于所有 Apple 平台。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")

    使用现代、简明的语法声明新类型。为实例属性提供默认值,并定义自定构造器。

    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

    使用 extension 向现有类型添加功能,并利用自定字符串转译减少样板代码。

    extension Player: Codable, Equatable {}
    
    import Foundation
    let encoder = JSONEncoder()
    try encoder.encode(player)
    
    print(player)
    // Prints "Player(name: "Tomas", highScore: 50, history: [50])”

    充分利用强大的语言功能,以便快速扩展自定义功能,如自动 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"]

    使用简化闭包执行强大的自定转换。

    正是这些富有前瞻性的概念,成就了这种有趣又易用的编程语言。

    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 })
        }
    }

    函数可能返回一个实例也可能不返回时,可以使用可选类型。

    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

    凭借可选类型绑定、可选链和 nil 合并等功能,你可以安全、高效地使用可选类型值。

    快速而强大

    最初构思时,我们就希望 Swift 实现快速运行的效果。利用出色的高性能 LLVM 编译器技术,Swift 代码会转换为经过优化的、可充分利用现代硬件的机器代码。此外,语法和标准资料库也进行了调整,使最浅显的编码方式也能有最佳表现,无论它是在你腕上的手表上运行,还是在集群服务器之间运行。

    Swift 是在 C、C++ 和 Objective-C 语言的基础上开发的全新编程语言。它包含诸如类型、流控制和运算符等底层基元。此外,它还提供面向对象的特性,例如类、协议和泛型,为 Cocoa 和 Cocoa Touch 开发者提供了他们所需的性能和功能。

    首门编程语言的绝佳选择

    Swift 能为你打开通往编程世界的大门。事实上,我们的设计初衷也是希望它能成为任何人的第一门编程语言——无论你是在求学阶段,还是准备开拓全新的职业生涯。对于教育工作者而言,Apple 编写了免费的课程,帮助他们在课堂内外教授 Swift。首次学习编程的用户可以下载 Swift Playgrounds,这是一款能让你的 Swift 代码入门学习充满互动和乐趣的 App,可在 iPad 和 Mac 上运行。

    有志于此的 App 开发者可以访问免费的课程,学习如何在 Xcode 中构建他们的首个 App。我们在世界各地的 Apple Store 商店都提供有“Today at Apple 编程与 App”课程,你可以在这些课程中体验 Swift 代码的实际操作。

    进一步了解 Apple 提供的 Swift 教育资源

    开源

    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,这是一款跨平台的异步事件驱动型网络 App 框架,适用于高性能协议服务器和客户端。它是构建其他面向服务器的工具和技术的基础,包括正在积极开发的日志记录、指标和数据库驱动程序。

    要进一步了解 Swift 开源社区和 Swift Server 工作组,请访问 Swift.org

    Playground 和 Read-Eval-Print-Loop (REPL)

    与 iPad 和 Mac 上的 Swift Playgrounds 类似,Xcode 中的 Playground 让编写 Swift 代码变得非常简单有趣。键入一行代码,就能马上看到结果。你可以从代码处快速查看结果,或将结果直接固定在这行代码下方。结果视图可以显示图形、结果列表或某个值随时间而变化的图形。你可以打开“时间轴助理”来观看复杂的视图演变和动画效果 (非常适合用于试验新的 UI 代码),或是在你编码时播放 SpriteKit 动画场景。在 Playground 中优化好代码后,即可将代码移到你的项目中。当你在终端或 Xcode 的 LLDB 调试控制台中使用 Swift 时,它也具有互动性。你可以使用 Swift 语法来评估现有 App 并与它互动,也可以编写新的代码来查看它在脚本式环境中的运作情况。

    Package Manager

    Swift Package Manager 是一个跨平台工具,可用于构建、运行、测试和打包 Swift 资料库和可执行文件。Swift 软件包是向 Swift 社区分发资料库和源代码的最佳方法。软件包的配置采用 Swift 编写,可以让你轻松配置目标、声明产品和管理软件包依赖项。Swift 软件包还可以包含自定命令,用于帮助构建项目并提供其他工具。实际上,Swift Package Manager 本身就采用 Swift 构建,也作为软件包内建在 Swift 开源项目中。

    Objective-C 和 C ++ 互操作性

    你可以立即使用 Swift 创建全新的 App,或开始使用 Swift 代码在你的 App 中实现新的特性和功能。Swift 代码可以与你现有的 Objective-C 和 C++ 文件在同一个项目中共存,并可访问 Objective-C 和 C++ API,因此你可以轻松地采用这些文件。

    使用入门

    下载 Xcode 并通过文档和示例代码学习如何用 Swift 构建 App。

    查看资源