首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift 5.8新特性预览:支持函数向后部署

Swift的最新版本支持即将到来的新特性,让开发人员可以开始使用将在 Swift 6 中变成稳定版本的特性。此外,它还提供了一种方法,让开发人员可以在早期操作系统中使用新功能。

Swift 5.8 之所以支持即将到来的语言特性,主要是为了让开发人员可以开始为程序迁移做准备。Swift 团队成员 Alexander Sandberg 说,考虑到 Swift 6 的许多特性造成了某种程度的源代码不兼容,这一点尤其重要。此外,支持新特性还可以帮助苹果收集早期用户的反馈。

新的编译器标志-enable- coming-feature X可以控制是否启用对即将到来的特性的支持,其中X是要启用的特性。目前,在 Swift 5.8 中,有 4 个即将到来的特性可以选择性地启用:简略魔法文件名、尾随闭包前向扫描匹配、存在类型any,以及正则表达式字面量

在使用即将到来的特性之前,可以使用新增的#if 检查确保它确实可用:#if hasFeature(ImplicitOpenExistentials)。需要的时候,可以将它与compiler(>=x.y) 检查一起使用。

Swift 5.8 还引入了对@backDeployed属性的支持,目的是为了方便开发人员将新功能向后移植到框架的旧版本。例如,可以通过扩展添加新功能,并使用众所周知的@available和新增的@backDeployed属性进行注解:

代码语言:javascript
复制
extension FrameworkAPI {
  @available(FrameworkAPIVersion 1.0, *)
  @backDeployed(before: FrameworkAPIVersion 2.0)
  public func newCapability(...) -> ResultType { ... }
}

在所提供的示例中,newCapability函数仅在FrameworkAPI的 2.0 版本中有原生支持,但是使用@backDeployed属性,开发人员可以提供该功能的实现,并注入到框架的先前版本中。

这个新特性旨在方便开发人员创建弹性库,并且只能应用于函数、方法、下标和计算属性。例如,这种机制不支持新类型。此外,向后部署的函数体必须遵守与@inlinable函数相同的限制,例如,它们只能引用客户端可访问的声明,如public@usableFromInline声明。

Swift 5.8 带来的另一项重大变化修改结果构建器实现,改进了它的编译时性能、代码补全结果和诊断。具体来说,新实现利用了 Swift 5.7 的扩展多语句闭包推断,优化了编译器类型推断和错误消息。特别是,它移除了在结果构建器中声明局部变量的几个限制,例如需要有初始化器,而且没有提供对计算变量、观察器和属性封装器的支持。

Swift 5.8 还带来了很多变化,要了解完整细节,请查阅官方公告。

原文链接:

https://www.infoq.com/news/2023/04/swift-5-8-released/

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/QAEbWTtfJg0IUUKs7tcg
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券