Swift 5.6 来啦!!!
Posted 程序员大咖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift 5.6 来啦!!!相关的知识,希望对你有一定的参考价值。
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇
文章来自 swift 官方博客,官宣 Swift 5.6,可点击阅读原文跳转
https://www.swift.org/blog/swift-5.6-released/
Swift 5.6 现已正式发布!
Swift 5.6 包括对类型系统的许多增强,改进了与指针的交互,并增加了使用包管理器运行新插件命令的能力。
要快速了解 Swift 5.6 中的一些新功能,可以查看 Paul Hudson 整理的这个 Playground https://github.com/twostraws/whats-new-in-swift-5-6。
如果您是 Swift 新手,那么 The Swift Programming Language 是有关 Swift 编程语言的权威指南,并且已针对 5.6 版进行了更新。Swift 社区还维护了许多翻译。它也可以在 Apple Books 商店免费获得。
语言和标准库
新功能和改进
Swift 5.6 依据 Swift Evolution 中的一些提议增强了语言能力,包括:
SE-0290 - 不可用条件
SE-0315 - 类型占位符(以前称为“占位符类型”)
SE-0320 - 允许将非 String / Int 键控字典编码到 KeyedContainer
SE-0322 - 临时未初始化的缓冲区
SE-0324 - 放宽 C 函数指针参数的诊断
SE-0331 - 从不安全的指针类型中删除 Sendable 一致性
SE-0335 - 引入 any
SE-0337 - 增量迁移到并发检查
下面详细介绍一下。
类型系统的增强
类型占位符 (SE-0315)
Swift 允许您使用类型推断从代码中省略冗长的、附带的细节。但是,在需要时编写显式类型可能会让人感觉有点过了,因为您必须指定完整的类型,即使您的代码只需要类型的特定部分来让代码更清晰:
enum Either<Left, Right>
case left(Left)
case right(Right)
let either: Either<ClosedRange<Int>, Range<Int>> = .left(0...10)
使用类型占位符,您现在可以在代码中编写部分类型注释以仅提供必要的详细信息。类型占位符用 _ 编写,它指示编译器推断缺少的类型:
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)
Existential any (SE-0335)
Swift 中的 Existential 类型用于存储符合特定协议的任何类型的值。Existential 类型使用简单的协议名称或协议组合拼写:
protocol DataSourceObserver ...
struct DataSource
var observers: [DataSourceObserver] ...
Existential 类型会擦除其基础类型信息,这在您需要动态更改基础类型时很有用,但它会禁止 Existential 类型具有其他有用的功能,例如符合协议。现有语法令人困惑,因为存在类型看起来就像一个通用的一致性要求,它没有这些基本限制。
在 Swift 5.6 中,Existential 类型可以用 any 关键字显式标记:
protocol DataSourceObserver ...
struct DataSource
var observers: [any DataSourceObserver] ...
改进与指针的交互
Swift 5.6 在处理不安全指针时引入了三项重大改进:
临时未初始化缓冲区 (SE-0322)
这引入了一种创建临时未初始化内存空间的新方法,这在与需要提供用于存储计算结果的内存的 C API 交互时特别有用。
放宽 C 函数指针参数的诊断 (SE-0324)
此更改允许将不安全指针的可变变体(例如 UnsafeMutablePointer)传递给采用不可变版本(例如 UnsafePointer)的 API,而无需显式转换。
从不安全的指针类型中删除可发送一致性 (SE-0331)
早期采用 Sendable 的反馈表明,指针一致性具有意想不到的负面后果,尤其是对于隐式一致性,因为这些类型的行为类似于引用。
改进的并发安全模型
Swift 5.6 还包括对并发安全模型的一些改进:
Sendable 和 @Sendable 闭包 (SE-0302)
@Sendable 函数类型等结构类型、由可发送类型(包括 Void)和元类型(如 Any.Type)组成的元组现在符合可发送协议。Task 和 task-local API 现在根据需要定义 Sendable 约束。
增量迁移到并发检查 (SE-0337)
在 Swift 5.6 中默认禁止有关 Sendable 的诊断,但可以通过显式定义对 Sendable 的一致性或使用 -warn-concurrency 编译器标志来启用,从而启用并发检查的增量迁移路径。
生态系统
Swift 包管理器
Swift 包管理器在 Swift 5.6 中获得了可扩展性功能,以及几个重要的安全性、性能和可靠性更新。
可扩展构建工具 (SE-0303)
引入了在 SwiftPM 中定义构建工具插件的能力,允许在构建过程中自动调用自定义工具。构建工具插件专注于构建包期间的代码生成,例如从 .proto 文件或其他输入生成 Swift 源文件,以便允许将构建工具合并到构建图中并自动运行一种安全的方式。
命令插件 (SE-0332)
扩展 SE-0303 首次引入的 SwiftPM 插件支持,以允许定义自定义命令插件——用户可以直接从 SwiftPM CLI 或支持 Swift 包的 IDE 调用的插件,以便对其包执行自定义操作。命令插件指定命令的语义意图——这可能是预定义的意图之一,例如“文档生成”或“源代码格式化”,或者它可能是具有可以传递给 swift 包的专用动词的自定义意图命令。
其他更新包括:
SE-0305 - 包管理器二进制目标改进
现在可以针对仅包含主要和次要版本标识符的 Git 标记名称来解析语义版本依赖关系。具有 X.Y 形式的标记将被视为 X.Y.0。这提高了与现有存储库的兼容性。
为了提高包的安全性,SwiftPM 执行首次使用时的信任 (TOFU) 验证。现在,当第一次从 Git 存储库下载包时,会记录包的指纹。后续下载的指纹必须与之前记录的值匹配,否则会根据设置导致构建警告或失败。
对依赖关系解析基础设施的多项改进,从而提高依赖关系解析的性能和可靠性
Swift-DocC 更新
Swift-DocC 现在可以使用新的插件命令支持作为 SwiftPM 插件使用。请参阅文档以了解如何开始。
此外,您现在可以使用 Swift-DocC 将静态内容发布到 GitHub Pages。
其他增强功能包括:
docc 命令行工具现在是用于 macOS 和 Linux 平台的开源、发布 Swift 工具链的一部分。
Swift-DocC 现在可以构建与静态托管环境兼容的文档,例如 GitHub Pages。
Swift-DocC 现在可以为命令行工具和应用程序等可执行目标生成文档。
请务必查看 Joseph Heck 的精彩博客文章 https://rhonabwy.com/2022/01/28/hosting-your-swift-library-docs-on-github-pages/,其中更详细地介绍了这一点。
下载
可从 Swift.org 下载适用于 Xcode、Windows 和 Linux 的官方二进制文件。Swift 5.6 也包含在 Xcode 13.3 中。
我们还为 Amazon Linux 2 和 CentOS 7 提供 RPM,仅供实验使用。请提供您的反馈。
使用以下说明进行 RPM 安装:
Amazon Linux 2
$ curl https://download.swift.org/experimental-use-only/repo/amazonlinux/releases/2/swiftlang.repo > /etc/yum.repos.d/swiftlang.repo
$ amazon-linux-extras install epel
$ yum install swiftlang
CentOS 7
$ curl https://download.swift.org/experimental-use-only/repo/centos/releases/7/swiftlang.repo > /etc/yum.repos.d/swiftlang.repo
$ yum install epel-release
$ yum install swiftlang
-End-
最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!
点击👆卡片,关注后回复【面试题
】即可获取
在看点这里好文分享给更多人↓↓
以上是关于Swift 5.6 来啦!!!的主要内容,如果未能解决你的问题,请参考以下文章