Swift 3.0 发布啦!
Swift 3.0,自 Swift 开源以来的首个主要版本,现已正式发布!Swift 3 是一个重大版本,包含对核心语言和标准库的重大改进和优化,对 Swift Linux 移植的重大补充,以及 Swift Package Manager 的首个正式版本。
语言变更
Swift 3.0 是一个主要的语言版本。它与 Swift 2.2 和 2.3 源代码不兼容。它包含以下通过 Swift 演进过程 的语言变更
- SE-0002:移除
func声明语法中的柯里化 - SE-0003:从函数参数中移除
var - SE-0004:移除
++和--运算符 - SE-0005:更好地将 Objective-C API 翻译成 Swift
- SE-0006:将 API 指南应用于标准库
- SE-0007:移除带有条件和递增器的 C 风格 for 循环
- SE-0008:为可选类型的序列添加惰性 flatMap
- SE-0016:为 Int 和 UInt 添加从 UnsafePointer 和 UnsafeMutablePointer 转换的初始化器
- SE-0017:更改
Unmanaged以使用UnsafePointer - SE-0019:Swift 测试
- SE-0023:API 设计指南
- SE-0025:作用域访问级别
- SE-0029:从函数应用中移除隐式元组展开行为
- SE-0031:调整用于类型装饰的 inout 声明
- SE-0032:向
SequenceType添加first(where:)方法 - SE-0033:将 Objective-C 常量导入为 Swift 类型
- SE-0034:消除行控制语句与调试标识符的歧义
- SE-0035:将
inout捕获限制为@noescape上下文 - SE-0036:要求枚举实例成员实现的前导点前缀
- SE-0037:阐明注释和运算符之间的交互
- SE-0038:包管理器 C 语言目标支持
- SE-0039:现代化 Playground 字面量
- SE-0040:用冒号替换属性参数的等号
- SE-0043:在带有多个模式的 'case' 标签中声明变量
- SE-0044:导入为成员
- SE-0046:在包括第一个标签在内的所有参数中建立一致的标签行为
- SE-0047:默认非 Void 函数,以便它们在使用未使用的结果时发出警告
- SE-0048:泛型类型别名
- SE-0049:将 @noescape 和 @autoclosure 移动为类型属性
- SE-0052:更改 IteratorType nil 后保证
- SE-0053:从函数参数中移除显式使用
let - SE-0054:废除
ImplicitlyUnwrappedOptional类型 - SE-0055:使用 Optional 显式化不安全指针的可空性
- SE-0057:导入 Objective-C 轻量级泛型
- SE-0059:更新 API 命名指南并相应地重写 Set API
- SE-0060:强制执行默认参数的顺序
- SE-0061:向 autoreleasepool() 添加泛型 Result 和错误处理
- SE-0062:引用 Objective-C 键路径
- SE-0063:SwiftPM 系统模块搜索路径
- SE-0064:引用属性 getter 和 setter 的 Objective-C 选择器
- SE-0065:集合和索引的新模型
- SE-0066:标准化函数类型参数语法以要求使用括号
- SE-0067:增强的浮点协议
- SE-0069:可变性和 Foundation 值类型
- SE-0070:使可选需求仅限 Objective-C
- SE-0071:允许在成员引用中使用(大多数)关键字
- SE-0072:完全消除 Swift 中的隐式桥接转换
- SE-0076:向 UnsafeMutablePointer 上的非破坏性复制方法添加采用 UnsafePointer 源的重载
- SE-0077:改进的运算符声明
- SE-0081:将
where子句移动到声明末尾 - SE-0085:包管理器命令名称
- SE-0086:在 Swift Foundation 中删除 NS 前缀
- SE-0088:为 Swift 3 命名约定现代化 libdispatch
- SE-0089:重命名
String.init<T>(_: T) - SE-0091:改进协议中的运算符要求
- SE-0092:协议和协议扩展中的类型别名
- SE-0093:向切片添加公共
base属性 - SE-0094:向 stdlib 添加 sequence(first:next:) 和 sequence(state:next:)
- SE-0095:用
P1 & P2语法替换protocol<P1,P2>语法 - SE-0096:将 dynamicType 从属性转换为运算符
- SE-0099:重构条件子句
- SE-0101:将
sizeof和相关函数重新配置为统一的MemoryLayout结构体 - SE-0102:移除
@noreturn属性并引入空的Never类型 - SE-0103:使非逃逸闭包成为默认
- SE-0106:为
OSX平台配置测试添加macOS别名 - SE-0107:UnsafeRawPointer API
- SE-0109:移除
Boolean协议 - SE-0111:移除函数参数标签的类型系统重要性
- SE-0112:改进的 NSError 桥接
- SE-0113:向 FloatingPoint 添加整数舍入函数
- SE-0114:将 Buffer “Value” 名称更新为 “Header” 名称
- SE-0115:重命名字面量语法协议
- SE-0116:将 Objective-C
id导入为 SwiftAny类型 - SE-0117:允许区分公共访问和公共可重写性
- SE-0118:闭包参数名称和标签
- SE-0120:修订
partition方法签名 - SE-0121:移除
Optional比较运算符 - SE-0124:
Int.init(ObjectIdentifier)和UInt.init(ObjectIdentifier)应该有一个bitPattern:标签 - SE-0125:移除
NonObjectiveCBase和isUniquelyReferenced - SE-0127:清理 stdlib 指针和缓冲区例程
- SE-0128:将可能失败的 UnicodeScalar 初始化器更改为可能失败的
- SE-0129:包管理器测试命名约定
- SE-0130:替换重复的
Character和UnicodeScalar形式的 String.init - SE-0131:向标准库添加
AnyHashable - SE-0133:将
flatten()重命名为joined() - SE-0134:重命名 String 上的两个 UTF8 相关属性
- SE-0135:包管理器支持按 Swift 版本区分软件包
- SE-0136:值的内存布局
- SE-0137:避免锁定到旧的协议设计
迁移到 Swift 3
Swift 3 是一个源代码不兼容的版本,这主要是由于 SE-0005 和 SE-0006 中的更改。这些更改不仅影响了标准库 API 的名称,还完全改变了 Objective-C API(尤其是来自 Cocoa 的 API)导入到 Swift 中的方式。许多更改在很大程度上是机械性的,但在典型的 Swift 项目中可能数量众多。
为了帮助迁移到 Swift 3,Xcode 8.0 包含一个代码迁移工具,可以自动处理许多需要的源代码更改。还有一个迁移指南可供使用,以指导您完成许多更改——尤其是那些不太机械化且需要更直接审查的更改。
文档
上现已提供 Swift 3.0 的更新版本 《Swift 编程语言》。它也可以在 Apple iBooks 商店中免费获取。
平台
Linux (Ubuntu 14.04 和 Ubuntu 15.10)
Linux 移植现在包括 Swift 核心库 和 Swift 包管理器。
Ubuntu 14.04 和 Ubuntu 15.10 的官方二进制文件可供下载。
Apple (Xcode)
对于在 Apple 平台上进行开发,Swift 3.0 作为 Xcode 8.0 的一部分发布。
源代码
Swift 3.0 的开发在 GitHub 上以下仓库的 swift-3.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-3.0-RELEASE 指定了这些仓库中构成 Swift 3.0 最终版本的特定修订版本。
swift-3.0-branch 分支将保持开放,但在相同的发布管理流程下,以累积未来潜在的错误修复 “点” 版本的更改。