Swift 4.0 发布!
Swift 4 现已正式发布!Swift 4 在 Swift 3 的优势基础上构建,提供更强的稳健性和稳定性,提供与 Swift 3 的源代码兼容性,改进了标准库,并添加了诸如归档和序列化等功能。
您可以观看 WWDC 2017:Swift 新特性 演示文稿,快速了解其概述,并尝试 Ole Begemann 整理的 playground 中的一些新功能。
语言更新
Swift 4.0 是一个主要的语言版本,包含以下通过 Swift Evolution 流程的语言更改和更新
字符串
Swift 4 包括更快、更易于使用的 String 实现,该实现保留了 Unicode 正确性,并增加了对创建、使用和管理子字符串的支持。
更多信息请参阅
- SE-0163 字符串修订:集合一致性、C 互操作、转码
- SE-0168 多行字符串字面量
- SE-0178 向 Character 添加 unicodeScalars 属性
- SE-0180 字符串索引大修
- SE-0182 字符串换行转义
- SE-0183 子字符串性能优化
集合
Swift 4 增加了对创建、使用和管理集合类型的改进。
更多信息请参阅
- SE-0148 泛型下标
- SE-0154 为字典键和值提供自定义集合
- SE-0165 字典和集合增强
- SE-0172 单侧范围
- SE-0173 添加
MutableCollection.swapAt(_:_:)
归档和序列化
Swift 4 支持结构体和枚举类型的归档,并支持到外部格式(如 JSON 和 plist)的类型安全序列化。
更多信息请参阅: SE-0166 Swift 归档与序列化
其他语言更新
Swift 4 还实现了 Swift Evolution 流程中的以下语言提案
- SE-0104 面向协议的整数
- SE-0142 允许 where 子句约束关联类型
- SE-0156 类和子类型存在类型
- SE-0160 限制 @objc 推断
- SE-0164 移除协议扩展中的 final 支持
- SE-0169 改进 private 声明和扩展之间的交互
- SE-0170 NSNumber 桥接和数值类型
- SE-0171 使用 inout 减少
- SE-0176 强制独占内存访问
- SE-0179 Swift run 命令
新的兼容模式
使用 Swift 4,您可能不需要修改代码即可使用新版本的编译器。该编译器支持两种语言模式
-
Swift 3.2:在此模式下,编译器将接受使用 Swift 3.x 编译器构建的大部分源代码。为了提供这种级别的源代码兼容性,先前存在的 API(无论是标准库的一部分还是 Apple 发布的 API)的更新将不会在此模式下显示。Swift 4 中的大多数新语言功能在此语言模式下均可用。
-
Swift 4.0:此模式包括所有 Swift 4.0 语言和 API 更改。许多项目将需要进行一些源代码迁移,尽管与 Swift 版本之间许多先前的重大更改相比,源代码更改的数量相当少。
语言模式由编译器通过 -swift-version 标志指定,该标志由 Swift Package Manager 和 Xcode 自动处理。
这些语言模式的一个优点是,您可以开始使用新的 Swift 4 编译器,并按照自己的节奏完全迁移到 Swift 4,一次一个模块地利用新的 Swift 4 功能。
有关 Swift 4 迁移和兼容模式的更多信息,请参阅迁移到 Swift 4
Package Manager 更新
Swift 4 为 Swift Package Manager 引入了新的工作流程功能和更完整的 API
- 现在,在标记您的第一个正式版本之前,或者一起处理多个软件包的分支,可以更轻松地并行开发多个软件包。
- 软件包产品已正式化,从而可以控制软件包向客户端发布哪些库。
- 新的 Package API 允许软件包指定许多新设置,从而使软件包作者可以更好地控制软件包的构建方式或源代码在磁盘上的组织方式。总体而言,用于创建软件包的 API 现在更加简洁明了,同时保留了与旧软件包的源代码兼容性。
- 在 macOS 上,Swift 软件包构建现在发生在沙箱中,该沙箱阻止网络访问和文件系统修改,以帮助减轻恶意制作的清单的影响。
此外,Swift Package Manager 构建于 Swift 3.1 中引入的软件包管理器工具版本控制之上 (SE-0159),该版本控制允许软件包作者指定构建软件包所需的 Swift 版本 — 现在包括 Swift 4。
有关 Package Manager 增强功能的更多信息,请参阅
- SE-0146 Package Manager 产品定义
- SE-0149 Package Manager 对树顶开发的支持
- SE-0150 Package Manager 对分支的支持
- SE-0158 Package Manager Manifest API 重新设计
- SE-0162 Package Manager 自定义目标布局
- SE-0175 Package Manager 修订的依赖项解析
- SE-0179 Swift run 命令
- SE-0181 Package Manager C/C++ 语言标准支持
文档
上提供了适用于 Swift 4.0 的最新版本《Swift 编程语言》。它也可以在 Apple 的 iBooks 商店中免费获取。
平台
Linux
Ubuntu 16.10、Ubuntu 16.04 和 Ubuntu 14.04 的官方二进制文件可供下载。
Apple (Xcode)
对于 Apple 平台上的开发,Swift 4.0 作为 Xcode 9 的一部分发布。
工具链也可从 下载。
源代码
Swift 4.0 的开发在 GitHub 上以下存储库的 swift-4.0-branch 分支中进行跟踪
- swift
- swift-llvm
- swift-clang
- swift-lldb
- swift-cmark
- swift-corelibs-foundation
- swift-corelibs-libdispatch
- swift-corelibs-xctest
- swift-llbuild
- swift-package-manager
- swift-xcode-playground-support
- swift-compiler-rt
- swift-integration-tests
标签 swift-4.0-RELEASE 指定了构成 Swift 4.0 最终版本的那些仓库中的特定修订版本。
swift-4.0-branch 分支将保持开放,但在相同的发布管理流程下,以累积更改,用于潜在的未来错误修复“点”版本发布。