可选类型(Optionals) 若有值时,不再隐式的转换为 true
,同样,若无值时,也不再隐式的转换为 false
, 这是为了避免在判别 optional Bool
的值时产生困惑。 替代的方案是,用==
或 !=
运算符显式地去判断Optinal是否是 nil
,以确认其是否包含值。
Swift新增了一个 Nil合并运算符(Nil Coalescing Operator) (a ?? b
), 该表达式中,如果Optional a
的值存在,则取得它并返回,若Optional a
为nil
,则返回默认值 b
更新和扩展 字符串的比较(Comparing Strings) 章节,用以反映和展示'字符串和字符的比较',以及'前缀(prefix)/后缀(postfix)比较'都开始基于扩展字符集(extended grapheme clusters)规范的等价比较.
现在,你可以通过 可选链(Optional Chaining)来:给属性设值,将其赋给一个下标脚注(subscript); 或调用一个变异(mutating)方法或运算符。对此,章节——通过可选链访问属性(Accessing Properties Through Optional Chaining)的内容已经被相应的更新。而章节——通过可选链调用方法(Calling Methods Through Optional Chaining中,关于检查方法调用是否成功的例子,已被扩展为展示如何检查一个属性是否被设值成功。
在章节可选链中,增加一个新的小节 访问可选类型的下标脚注(Accessing Subscripts of Optional Type)
更新章节 访问和修改数组(Accessing and Modifying an Array) 以标示:从该版本起,不能再通过+=
运算符给一个数组添加一个新的项。. 对应的替代方案是, 使append
方法, 或者通过+=
运算符来添加一个只有一个项的数组(single-item Array).
添加了一个提示:在 范围运算符(Range Operators)中,比如, a...b
和 a..<b
,起始值a
不能大于结束值b
.
重写了继承(Inheritance) 这一章:删除了本章中关于构造器重写的介绍性报道;转而将更多的注意力放到新增的部分——子类的新功能,以及如何通过重写(overrides)修改已有的功能。另外,小节 重写属性的Getters和Setters(Overriding Property Getters and Setters) 中的例子已经被替换为展示如何重写一个 description
属性. (而关于如何在子类的构造器中修改继承属性的默认值的例子,已经被移到 构造过程(Initialization) 这一章.)
更新了 构造器的继承与重写(Initializer Inheritance and Overriding) 小节以标示: 重写一个特定的构造器必须使用 override
修改器.
更新 Required构造器(Required Initializers) 小节以标示:required
修改器现在需要出现在所有子类的required构造器的声明中, 而required构造器的实现,现在可以仅从父类自动继承。
中置(Infix)的 运算符函数(Operator Functions) 不再需要@infix
属性.
前置和后置运算符(Prefix and Postfix Operators)的@prefix
和 @postfix
属性,已变更为 prefix
和 postfix
声明修改器(declaration modifiers).
增加一条注解:当Prefix和postfix运算符被作用于同一个操作数时,关于前置和后置运算符(Prefix and Postfix Operators)的顺序(postfix运算符会先被执行)
在运算符函数(Operator functions)中, 组合赋值运算符(Compound Assignment Operators) 不再使用 @assignment
属性来定义函数.
在这个版本中,在定义自定义操作符(Custom Operators) 时,修改器(Modifiers)的出现顺序发生变化。比如, 现在,你该编写 prefix operator
, 而不是 operator prefix
.
增加信息:关于dynamic
声明修改器(declaration modifier),于章节 声明修改器(Declaration Modifiers).
增加信息:字面量Literals 的类型推导(type inference)
为章节Curried Functions添加了更多的信息.