Swift 5.6 现已正式发布。此版本包括了对类型系统的许多增强、改进了与指针的交互,并增加了使用包管理器运行新插件命令的能力。
Swift Evolution 流程中的一些提案也在 Swift 5.6 中得以实现:
- SE-0290 - Unavailability Condition
- SE-0302 -
Sendable
和@Sendable
closures - SE-0315 - Type placeholders(以前称为“Placeholder types”)
enum Either<Left, Right> {
case left(Left)
case right(Right)
}
// Inferred as 'Either<ClosedRange<Int>, Range<Int>>'
let either: Either<_, Range<Int>> = .left(0...10)
- SE-0320 - 允许在
KeyedContainer
中对非String
/Int
键入的 Dictionary 进行编码 - SE-0322 - 临时未初始化的缓冲区。这引入了一种创建临时未初始化内存空间的新方法,这在与需要提供用于存储计算结果的内存的 C API 交互时特别有用。
- SE-0324 - 放宽 C 函数指针参数的诊断。此更改允许将不安全指针的可变体(例如
UnsafeMutablePointer
)传递给采用不可变体(例如UnsafePointer
)的API,而无需显式转换。 - SE-0331 - 从不安全的指针类型中删除 Sendable 一致性
- SE-0335 - 引入了 existential any
protocol DataSourceObserver { ... }
struct DataSource {
var observers: [any DataSourceObserver] { ... }
}
- SE-0337 - 增量迁移到并发检查。在 Swift 5.6 中,关于 Sendable 的诊断默认是被抑制的,但可以通过明确定义对 Sendable 的符合性或使用 -warn-concurrency 编译器标志来启用,从而实现并发检查的增量迁移路径。
1. Windows 平台支持的咋样了?
2. 与 C++ 交互进展如何?
2. 没进展