What's new in Swift
System & Services 进阶 20m

Swift 新特性

What's new in Swift

2022年6月6日

在 Apple 官方观看视频

一句话判断

Swift 5.7 带来了泛型语法大简化、并发安全路线图、强大的字符串处理 API——这场 Session 是理解 Swift 语言进化方向的关键节点。

这场 Session 讲了什么

Swift 团队的 Angela 和 Becca 全面介绍了 Swift 5.7 的新特性。内容涵盖四个方面:工具链改进(包括新的包管理器插件和 docc 开源)、并发模型演进(Swift 6 线程安全路线图)、语言简化(更干净的泛型语法)、以及全新的字符串处理能力。

Session 强调 Swift 社区的活跃参与——docc 和 Swift.org 网站的开源、新的工作组和导师计划都体现了社区驱动的发展模式。

值得深挖的点

泛型语法的重大简化。Swift 5.7 让泛型代码更易读:some 关键字可以用于参数位置、关联类型的约束更清晰、where 子句的写法更简洁。开发者写泛型代码的心智负担显著降低。

Swift 6 并发安全路线图。Swift 5.7 继续推进 Sendable 协议和 Actor 模型的采用,为 Swift 6 的完全线程安全做准备。新的编译器检查会警告潜在的并发问题,帮助开发者逐步迁移。

全新的字符串处理 API。基于正则表达式的字符串匹配有了原生 Swift API,Regex 类型是一等公民。配合 RegexBuilder(结果构建器风格的 DSL),字符串解析变得既类型安全又易读。

包管理器插件系统。Swift Package Manager 新增插件支持,允许自定义构建步骤、代码生成、文档生成等。这为工具链扩展打开了大门。

代码片段

// Swift 5.7 简化的泛型语法
// 以前:func process<T: Comparable>(_ value: T)
// 现在 some 也可以用在参数位置
func process(_ value: some Comparable) {
    // 更简洁的写法
}

// 全新的 Regex API
let regex = /Hello, (\w+)/
if let match = "Hello, World".firstMatch(of: regex) {
    print(match.1) // "World",类型安全的捕获组
}

// RegexBuilder DSL
let parser = Regex {
    "Score: "
    OneOrMore(.digit)
    Optionally {
        "."
        OneOrMore(.digit)
    }
}

// Sendable 协议标记线程安全类型
struct Configuration: Sendable {
    let apiKey: String
    let timeout: TimeInterval
}

// Actor 模型确保隔离
actor DataCache {
    private var cache: [String: Data] = [:]
    func get(_ key: String) -> Data? { cache[key] }
    func set(_ key: String, _ data: Data) { cache[key] = data }
}

最佳实践

  • 在新代码中使用简化的泛型语法,逐步迁移旧代码
  • 开始采用 Sendable 协议标注,为 Swift 6 的严格并发检查做准备
  • 用 Regex 和 RegexBuilder 替代 NSRegularExpression,获得类型安全和更好的性能
  • 利用 SPM 插件系统自动化重复性任务(代码生成、格式化等)
  • 开启 Strict Concurrency 检查,尽早发现潜在的并发问题

还有什么值得关注

  • DocC 文档工具已开源,可以生成任意 Swift 包的文档站
  • C++ 互操作性工作组正在推进 Swift 与 C++ 的直接互调
  • Diversity in Swift 导师计划为社区贡献者提供入门路径
  • Swift on Server 工作组持续推动服务端 Swift 生态发展
WWDC 2022