4.1 文档修订历史

原文链接: https://docs.swift.org/latest/documentation/the-swift-programming-language/revisionhistory/

4.1 文档修订历史

回顾本书近期的改动。

2026-07-06

  • 更新至 Swift 6.4。
  • 全书做了少量更正与补充。

2026-03-23

  • 更新至 Swift 6.3。
  • 全书做了少量更正与补充。

2025-12-12

  • 更新至 Swift 6.2.3。
  • 新增 export 一节,介绍如何把定义导出到客户端模块。

2025-11-03

  • 更新至 Swift 6.2.1。
  • 新增整型泛型形参一节,介绍取值为数字的泛型形参。
  • 在整数和浮点数两节中补充了关于在整数与浮点数之间做选择的内容。

2025-09-15

  • 更新至 Swift 6.2。
  • 新增内存安全一节,介绍 Swift 帮助你避免的问题。
  • 新增模式一节,介绍 if case 语法。
  • 在并发一章中补充了关于主 actor、隔离和全局 actor 的内容。
  • 新增对协议的隐式遵循一节,介绍如何在不显式写出遵循性的情况下遵循常见协议,以及如何抑制隐式遵循。
  • 新增隐式约束一节,介绍要求遵循常见协议的泛型约束。

2025-03-31

  • 更新至 Swift 6.1。
  • 新增不透明参数类型一节,介绍如何把 some 用作泛型的轻量语法。
  • 在 available 一节中补充了关于 noasync 实参的内容。

2024-09-23

  • 更新至 Swift 6。
  • 新增 preconcurrency 一节,介绍如何迁移到严格并发检查。
  • 新增指定错误类型一节,介绍如何抛出特定类型的错误。
  • 更新了宏展开表达式一节,因为现在任何宏都可以用作参数的默认值。
  • 在访问控制一章中补充了关于包级访问的内容。

2024-03-05

2023-12-11

  • 更新至 Swift 5.9.2。
  • 在参数修饰符一节中补充了关于 borrowing 和 consuming 修饰符的内容。
  • 在声明常量与变量中补充了关于在声明之后再给常量赋值的内容。
  • 在并发一章中补充了关于任务、任务组和任务取消的更多内容。
  • 在宏一章中补充了关于在已有 Swift 包中实现宏的内容。
  • 更新了 attached 一节,因为扩展宏已经取代了遵循性宏。
  • 新增 backDeployed 一节,介绍向后部署。

2023-09-18

  • 更新至 Swift 5.9。
  • 在控制流一章和条件表达式一节中补充了关于 if 和 switch 表达式的内容。
  • 新增宏一章,介绍如何在编译期生成代码。
  • 扩展了基础中关于可选类型的讨论。
  • 在 Swift 初览中新增了一个并发示例。
  • 在不透明类型与装箱协议类型一章中补充了关于装箱协议类型的内容。
  • 在结果变换一节中补充了关于 buildPartialBlock(first:) 和 buildPartialBlock(accumulated:next:) 方法的内容。
  • 在 available 和条件编译块的平台列表中加入了 visionOS。
  • 调整了正式语法的排版,改用空行分组。

2023-03-30

  • 更新至 Swift 5.8。
  • 新增延迟执行的动作一节,展示错误处理之外的 defer。
  • 采用 Swift-DocC 发布。
  • 全书做了少量更正与补充。

2022-09-12

2022-03-14

  • 更新至 Swift 5.6。
  • 更新了显式成员表达式一节,补充了在链式方法调用及其他后置表达式周围使用 #if 的内容。
  • 更新了全书插图的视觉样式。

2021-09-20

2021-04-26

2020-09-16

2020-03-24

  • 更新至 Swift 5.2。
  • 在键路径表达式一节中补充了关于传入键路径而不是闭包的内容。
  • 新增具有特殊名称的方法一节,介绍让类、结构体和枚举的实例可以用函数调用语法使用的语法糖。
  • 更新了下标选项一节,因为下标现在支持带默认值的参数。
  • 更新了 Self 类型一节,因为 Self 现在可以在更多上下文中使用。
  • 更新了隐式解包可选值一节,更清楚地说明隐式解包可选值既可以当作可选值使用,也可以当作非可选值使用。

2019-09-10

2019-03-25

2018-09-17

  • 更新至 Swift 4.2。
  • 在遍历枚举成员一节中补充了访问枚举全部成员的内容。
  • 在编译期诊断语句一节中补充了关于 #error 和 #warning 的内容。
  • 在声明特性一节的 inlinable 和 usableFromInline 特性下补充了关于内联的内容。
  • 在声明特性一节的 dynamicMemberLookup 特性下补充了关于在运行时按名字查找成员的内容。
  • 在声明特性一节中补充了关于 requires_stored_property_inits 和 warn_unqualified_access 特性的内容。
  • 在条件编译块一节中补充了如何根据所用的 Swift 编译器版本做条件编译的内容。
  • 在字面表达式一节中补充了关于 #dsohandle 的内容。

2018-03-29

2017-12-04

  • 更新至 Swift 4.0.3。
  • 更新了键路径表达式一节,因为键路径现在支持下标组成部分。

2017-09-19

2017-03-27

  • 更新至 Swift 3.1。
  • 新增带泛型 where 子句的扩展一节,介绍带要求的扩展。
  • 在 for-in 循环一节中补充了遍历范围的示例。
  • 在可失败构造器一节中补充了可失败数值转换的示例。
  • 在声明特性一节中补充了把 available 特性与 Swift 语言版本一起使用的内容。
  • 更新了函数类型一节中的讨论,指出书写函数类型时不允许使用实参标签。
  • 更新了条件编译块一节中关于 Swift 语言版本号的讨论,因为现在允许包含可选的补丁版本号。
  • 更新了函数类型一节中的讨论,因为 Swift 现在区分"接受多个参数的函数"和"接受单个元组类型参数的函数"。
  • 从表达式一章中移除了动态类型表达式一节,因为 type(of:) 现在是 Swift 标准库函数。

2016-10-27

  • 更新至 Swift 3.0.1。
  • 更新了自动引用计数一章中关于弱引用和无主引用的讨论。
  • 在声明修饰符一节中补充了关于 unowned、unowned(safe) 和 unowned(unsafe) 声明修饰符的内容。
  • 在 Any 与 AnyObject 的类型转换一节中补充了一条注记,说明在期望 Any 类型值的地方使用可选值的情况。
  • 更新了表达式一章,把括号表达式与元组表达式的讨论分开。

2016-09-13

  • 更新至 Swift 3.0。
  • 更新了函数一章和函数声明一节中关于函数的讨论,指出所有参数默认都会有实参标签。
  • 更新了高级运算符一章中关于运算符的讨论,因为现在以类型方法而非全局函数的形式实现它们。
  • 在访问控制一章中补充了关于 open 和 fileprivate 访问级别修饰符的内容。
  • 更新了函数声明一节中关于 inout 的讨论,指出它写在参数类型之前而不是参数名之前。
  • 更新了逃逸闭包、自动闭包两节以及属性特性一章中关于 @noescape 和 @autoclosure 特性的讨论,因为它们现在是类型特性而不是声明特性。
  • 在高级运算符一章的自定义中置运算符的优先级一节,以及声明一章的优先级组声明一节中,补充了关于运算符优先级组的内容。
  • 全书改用 macOS 而不是 OS X、用 Error 而不是 ErrorProtocol,并把 StringLiteralConvertible 之类的协议名改为 ExpressibleByStringLiteral。
  • 更新了泛型一章的泛型 where 子句一节,以及泛型形参与实参一章中的讨论,因为泛型 where 子句现在写在声明末尾。
  • 更新了逃逸闭包一节中的讨论,因为闭包现在默认是非逃逸的。
  • 更新了基础一章的可选绑定一节,以及语句一章的 while 语句一节中的讨论,因为 if、while 和 guard 语句现在使用逗号分隔的条件列表,而不再使用 where 子句。
  • 在控制流一章的 switch一节,以及语句一章的 switch 语句一节中,补充了关于带多个模式的 switch 分支的内容。
  • 更新了函数类型一节中关于函数类型的讨论,因为函数实参标签已不再是函数类型的一部分。
  • 更新了协议一章的协议组合一节,以及类型一章的协议组合类型一节中关于协议组合类型的讨论,改用新的 Protocol1 & Protocol2 语法。
  • 更新了动态类型表达式一节中的讨论,改用新的 type(of:) 语法书写动态类型表达式。
  • 更新了行控制语句的讨论,在行控制语句一节中改用 #sourceLocation(file:line:) 语法。
  • 更新了永不返回的函数中的讨论,改用新的 Never 类型。
  • 在字面表达式一节中补充了关于 playground 字面量的内容。
  • 更新了输入输出参数一节中的讨论,指出只有非逃逸闭包才能捕获输入输出参数。
  • 更新了默认参数值一节中关于默认参数的讨论,因为它们在函数调用中不再能重排顺序。
  • 在属性特性一章中把特性实参改用冒号书写。
  • 在重新抛出错误的函数和方法一节中补充了在重新抛出函数的 catch 块中抛出错误的内容。
  • 在选择器表达式一节中补充了访问 Objective-C 属性取值器或设值器选择器的内容。
  • 在类型别名声明一节中补充了关于泛型类型别名以及在协议内部使用类型别名的内容。
  • 更新了函数类型一节中关于函数类型的讨论,指出参数类型外必须加圆括号。
  • 更新了属性特性一章,指出 @IBAction、@IBOutlet 和 @NSManaged 特性隐含 @objc 特性。
  • 在声明特性一节中补充了关于 @GKInspectable 特性的内容。
  • 更新了可选协议要求一节中关于可选协议要求的讨论,澄清它们只用于与 Objective-C 互操作的代码。
  • 从函数声明一节中移除了关于在函数参数中显式使用 let 的讨论。
  • 从语句一章中移除了关于 Boolean 协议的讨论,因为该协议已从 Swift 标准库中移除。
  • 更正了声明特性一节中关于 @NSApplicationMain 特性的讨论。

2016-03-21

  • 更新至 Swift 2.2。
  • 在条件编译块一节中补充了如何根据所用的 Swift 版本做条件编译的内容。
  • 在显式成员表达式一节中补充了如何区分"仅实参名不同"的方法或构造器的内容。
  • 在选择器表达式一节中补充了关于 Objective-C 选择器的 #selector 语法的内容。
  • 更新了关联类型和协议关联类型声明两节中关于关联类型的讨论,改用 associatedtype 关键字。
  • 更新了可失败构造器一节中关于"在实例完全初始化之前返回 nil 的构造器"的内容。
  • 在比较运算符一节中补充了关于比较元组的内容。
  • 在关键字与标点一节中补充了把关键字用作外部参数名的内容。
  • 更新了声明特性一节中关于 @objc 特性的讨论,指出枚举和枚举成员也可以使用该特性。
  • 更新了运算符一节,加入了关于含点号的自定义运算符的讨论。
  • 在重新抛出错误的函数和方法一节中补充了一条注记,说明重新抛出函数不能直接抛出错误。
  • 在属性观察器一节中补充了一条注记,说明把属性作为输入输出参数传入时属性观察器会被调用。
  • 在 Swift 初览一章中新增了关于错误处理的一节。
  • 更新了弱引用一节的插图,更清楚地展示释放过程。
  • 移除了关于 C 风格 for 循环、++ 前置和后置运算符,以及 -- 前置和后置运算符的讨论。
  • 移除了关于可变函数实参和柯里化函数特殊语法的讨论。

2015-10-20

2015-09-16

2015-04-08

  • 更新至 Swift 1.2。
  • Swift 现在有了原生的 Set 集合类型。更多内容参见集合。
  • @autoclosure 现在是参数声明的特性,而不再是参数类型的特性;同时还新增了 @noescape 参数声明特性。更多内容参见声明特性。
  • 类型方法和类型属性现在用 static 关键字作为声明修饰符。更多内容参见类型变量属性。
  • Swift 现在包含 as? 和 as! 可失败向下转换运算符。更多内容参见检查协议遵循性。
  • 新增了关于字符串下标的一节指南内容。
  • 从溢出运算符中移除了溢出除法(&/)和溢出求余(&%)运算符。
  • 更新了常量与常量属性声明和初始化的规则。更多内容参见常量声明。
  • 更新了字符串字面量中 Unicode 标量的定义。参见字符串字面量中的特殊字符。
  • 更新了范围运算符,指出上下界相同的半开区间将是空区间。
  • 更新了闭包是引用类型,澄清变量的捕获规则。
  • 更新了数值溢出,澄清有符号和无符号整数的溢出行为。
  • 更新了协议声明,澄清协议声明的作用域与成员。
  • 更新了定义捕获列表,澄清闭包捕获列表中弱引用和无主引用的语法。
  • 更新了运算符,明确列出可用于自定义运算符的字符示例,例如来自 Mathematical Operators、Miscellaneous Symbols 和 Dingbats Unicode 块的字符。
  • 常量现在可以在局部函数作用域中声明而不初始化,但必须在第一次使用之前赋值。更多内容参见常量声明。
  • 在构造器中,常量属性现在只能赋值一次。更多内容参见在初始化期间给常量属性赋值。
  • 同一个 if 语句中现在可以出现多个可选绑定,以逗号分隔的赋值表达式列表形式书写。更多内容参见可选绑定。
  • 可选链表达式必须出现在后置表达式之中。
  • 协议转换不再局限于 @objc 协议。
  • 可能在运行时失败的转换现在使用 as? 或 as! 运算符,而保证不会失败的转换使用 as 运算符。更多内容参见类型转换运算符。

2014-10-16

  • 更新至 Swift 1.1。
  • 新增了一份关于可失败构造器的完整指南。
  • 新增了对协议可失败构造器要求的说明。
  • Any 类型的常量与变量现在可以存放函数实例。更新了 Any 与 AnyObject 的类型转换中的示例,展示如何在 switch 语句中检查并转换到函数类型。
  • 带原始值的枚举现在有 rawValue 属性(而不是 toRaw() 方法),以及带 rawValue 参数的可失败构造器(而不是 fromRaw() 方法)。更多内容参见原始值和成员为原始值类型的枚举。
  • 新增了关于可失败构造器的参考章节,说明它可以触发初始化失败。
  • 自定义运算符现在可以包含 ? 字符。更新了运算符参考资料以描述修订后的规则,并从自定义运算符中移除了关于合法运算符字符集合的重复说明。

2014-08-18

  • 新文档,描述 Swift 1.0——Apple 用于构建 iOS 和 OS X 应用的新编程语言。
  • 新增了协议中构造器要求的一节。
  • 新增了类专用协议的一节。
  • 断言与前提条件现在可以使用字符串插值。移除了与之相反的注记。
  • 更新了拼接字符串与字符一节,以反映 String 与 Character 值不能再与加法运算符(+)或加法赋值运算符(+=)组合使用这一事实:这些运算符现在只用于 String 值;要把单个 Character 值追加到字符串末尾,请使用 String 类型的 append(_:) 方法。
  • 在声明特性一节中补充了关于 availability 特性的内容。
  • 可选类型不再在"有值"时隐式求值为 true、“无值"时求值为 false,以避免在处理可选 Bool 值时产生混淆。若要判断可选值是否包含值,请改用 == 或 != 运算符显式地与 nil 比较。
  • Swift 现在有了空合运算符(a ?? b):如果可选值有值就解包该值,否则返回默认值。
  • 更新并扩展了比较字符串一节,以反映并演示字符串与字符比较、前缀/后缀比较现在基于扩展字形簇的 Unicode 规范等价性。
  • 现在可以通过可选链尝试设置属性值、给下标赋值,或者调用可变方法或运算符。关于通过可选链访问属性的内容也相应更新,且通过可选链调用方法中检查方法调用成功的示例已扩展,展示如何检查属性设置是否成功。
  • 新增了关于通过可选链访问可选类型的下标的一节。
  • 更新了访问和修改数组一节,指出不能再使用 += 运算符向数组追加单个元素:请改用 append(_:) 方法,或者用 += 运算符追加一个只含单个元素的数组。
  • 补充了一条注记,说明范围运算符 a...b 和 a..<b 的起始值 a 不能大于结束值 b。
  • 重写了继承一章,移除了其中关于构造器覆盖的入门性内容。该章现在更侧重于子类中新增功能的添加,以及通过覆盖修改既有功能。该章的覆盖属性的取值器与设值器示例已重写,展示如何覆盖 description 属性。(在子类构造器中修改继承属性默认值的示例已移到初始化一章。)
  • 更新了构造器的继承与覆盖一节,指出对指定构造器的覆盖现在必须用 override 修饰符标记。
  • 更新了必需构造器一节,指出 required 修饰符现在要写在子类的每一个必需构造器实现之前,而且必需构造器的要求现在可以由自动继承的构造器满足。
  • 中置运算符方法不再需要 @infix 特性。
  • 前置和后置运算符的 @prefix 和 @postfix 特性已被 prefix 和 postfix 声明修饰符取代。
  • 补充了一条注记,说明对同一个操作数同时应用前置和后置运算符时的应用顺序。
  • 复合赋值运算符的运算符函数在定义时不再使用 @assignment 特性。
  • 定义自定义运算符时指定修饰符的顺序发生了变化:现在写 prefix operator 而不是 operator prefix,以此类推。
  • 在声明修饰符中补充了关于 dynamic 声明修饰符的内容。
  • 补充了类型推断如何与字面量配合工作的内容。
  • 补充了关于柯里化函数的更多内容。
  • 新增了关于访问控制的一章。
  • 更新了字符串与字符一章,以反映 Swift 的 Character 类型现在表示单个 Unicode 扩展字形簇这一事实,其中包括新增的扩展字形簇一节,以及关于 Unicode 标量值和比较字符串的更多内容。
  • 更新了字符串字面量一节,指出字符串字面量中的 Unicode 标量现在写作 \u{n},其中 n 是 0 到 10FFFF(Unicode 码空间范围)之间的十六进制数。
  • NSString 的 length 属性现在映射到 Swift 原生 String 类型上的 utf16Count,而不是 utf16count。
  • Swift 的原生 String 类型不再有 uppercaseString 或 lowercaseString 属性。字符串与字符中相应的小节已被移除,多处代码示例也已更新。
  • 新增了无实参标签的构造器参数一节。
  • 新增了必需构造器一节。
  • 新增了可选元组返回类型一节。
  • 更新了类型标注一节,指出可以在同一行用一次类型标注定义多个相关变量。
  • @optional、@lazy、@final 和 @required 特性现在改成了 optional、lazy、final 和 required 声明修饰符。
  • 全书改用半开区间运算符来称呼 ..<(而不再称"半闭区间运算符”)。
  • 更新了访问和修改字典一节,指出 Dictionary 现在有布尔属性 isEmpty。
  • 更清楚地列出了定义自定义运算符时可以使用的全部字符。
  • nil 以及布尔值 true 和 false 现在属于字面量。
  • Swift 的 Array 类型现在具有完整的值语义。更新了集合的可变性和数组中的内容以反映这一新做法,并澄清了字符串、数组和字典的赋值与复制行为。
  • 数组类型简写语法现在写作 [SomeType] 而不是 SomeType[]。
  • 新增了关于字典类型简写语法的一节,它写作 [KeyType: ValueType]。
  • 新增了关于集合类型的哈希值的一节。
  • 闭包表达式的示例现在改用全局 sorted(_:_:) 函数,而不是全局 sort(_:_:) 函数,以反映新的数组值语义。
  • 更新了结构体类型的逐成员构造器的内容,澄清即使结构体的存储属性没有默认值,逐成员构造器也依然可用。
  • 更新为使用 ..< 而不是 .. 来表示半开区间运算符。
  • 新增了一个扩展泛型类型的示例。