Swift 5.7 现已发布,该版本包括对语言和标准库的主要添加、对编译器的增强以提供更好的开发人员体验、对 Swift 生态系统中的工具(包括 SourceKit-LSP 和 Swift 包管理器)的改进、改进的 Windows 支持等等。
语言和标准库
Swift 5.7 语言和标准库具有多项改进:
- 通用样板代码的新速记语法,包括
if let
语句和多语句 closure type annotations - 解除长期存在的语言限制,使通用编程更加无缝
- 通过新的 annotations 和 opt-in diagnositcs 增强 data race 安全性
- 分布式环境中的 Actor 隔离
- 改进了一套现有指针 API 的可用性
- 全新的语言支持和字符串处理的 API
开发者体验
新的泛型实现
除了上述用于处理泛型的语言改进之外,类型检查器的泛型实现也从头开始重写,在正确性和性能方面都有所改进。
新的实现修复了许多长期存在的错误,主要与处理复杂的同类型需求有关,例如对集合SubSequence
关联类型的同类型需求,以及使用CaseIterable
协议的代码,该协议定义了Self.Element == Self
的要求。
新的泛型实现也提高了性能。在某些协议和关联类型的配置下,类型检查时间在 Swift 5.6 中会呈指数增长,但现在在 Swift 5.7 中是线性的。
自动引用计数改进
在 Swift 5.7 中,通过指定新规则以在允许优化时缩短变量的生命周期,ARC 行为更具可预测性、用户友好性和执行性。为了强制执行这些规则,编译器采用了一种新的内部表示来跟踪每个变量的词法范围。这涉及更新现有的优化和实现几个新的优化。现在,依赖于扩展变量生命周期的最常见编程模式是安全的,无需程序员显式使用withExtendedLifetime()
,这可以保护你免受仅在优化构建中运行时出现的难以诊断的生命周期错误。它还允许在不破坏现有资源的情况下引入更强大的优化。
Code Completion
函数调用参数、变量和全局函数的 Code Completion 现在紧密集成到 Swift 的类型检查器中。这允许 Code Completion 能够在模糊的代码或有错误的代码中提供更准确的结果。
如果在以下示例中的+
完成后,Code Completion 现在会报告 int 和 string 与周围的上下文相匹配,允许编辑器将这些结果排在高于array
的位置。
func makeIntOrString() -> Int {}
func makeIntOrString() -> String {}
let array = [4, 2]
let int = 42
let string = "Hello World!"
makeIntOrString() +
如果补全以下示例中缺少的参数,Code Completion 现在只提示 secondInt 参数标签而省略 secondString。
func add(_ firstInt: Int, secondInt: Int) {}
func add(_ firstString: String, secondString: String) {}
add(1, )
更多详情可查看官方博客。