Swift 5.8 新增函数向后部署及即将推出的功能支持

Swift 5.8 新特性总结

Swift 5.8 的最新发布引入了一系列新特性,旨在帮助开发者逐步采用未来的语言功能,并为迁移到 Swift 6 做好准备。以下是主要更新内容:

逐步采用未来特性

Swift 5.8 支持开发者逐步采用即将在 Swift 6 中稳定的新特性。这一功能的主要目的是让开发者提前为程序迁移做好准备,尤其是考虑到 Swift 6 中的一些特性可能会带来源代码不兼容的问题。此外,该功能还有助于苹果收集早期采用者的反馈。

  • 控制方式:通过新的编译器标志 -enable-upcoming-feature X 来控制启用哪些未来特性,其中 X 是具体特性的名称。
  • 当前支持的未来特性:目前有四个特性可以选择性启用:

    1. 简洁的文件名魔法(Concise Magic File Names)
    2. 尾随闭包的前向扫描匹配(Forward-scan Matching for Trailing Closures)
    3. 存在类型 any(Existential Any)
    4. 正则表达式字面量(Regex Literals)
  • 特性可用性检查:新增 #if hasFeature(ImplicitOpenExistentials) 检查,结合 compiler(>=x.y) 检查,确保特性可用后再使用。

向后部署新功能

Swift 5.8 引入了 @backDeployed 属性,使开发者能够更轻松地将新功能向后移植到框架的旧版本中。

  • 使用场景:通过扩展添加新功能,并使用 @available@backDeployed 属性标注。例如:

    extension FrameworkAPI {
      @available(FrameworkAPIVersion 1.0, *)
      @backDeployed(before: FrameworkAPIVersion 2.0)
      public func newCapability(...) -> ResultType { ... }
    }
    • 在这个例子中,newCapability 函数在 FrameworkAPI 2.0 版本中才原生支持,但通过 @backDeployed 属性,开发者可以将其实现注入到旧版本中。
  • 限制:该功能仅适用于函数、方法、下标和计算属性,不能用于新类型。此外,后部署函数的主体必须符合 @inlinable 函数的限制。

结果构建器的改进

Swift 5.8 对结果构建器(Result Builder)的实现进行了显著改进,提升了编译时性能、代码补全效果和诊断信息。

  • 改进点:利用 Swift 5.7 的扩展多语句闭包推断(Extended Multi-statement Closure Inference),优化类型推断和错误信息。
  • 移除的限制:取消了对结果构建器中局部变量声明的多项限制,例如不再要求必须初始化,并且支持计算变量、观察器和属性包装器。

其他更新

Swift 5.8 还包含了许多其他改进和优化,详细内容可参考官方发布公告。

总结

Swift 5.8 通过支持逐步采用未来特性、引入 @backDeployed 属性和改进结果构建器,为开发者提供了更灵活的工具和更好的开发体验,同时为 Swift 6 的迁移做好了准备。

阅读 27
0 条评论