说明:限于《语言指引》部分的主要更新
操作符
移除了溢出除、溢出取余操作符
集合
集合类Set(添加)
Set中存放不能重复的元素,无序。存放的元素需要遵循hashable协议。
控制流
添加新的控制语句:guard
guard语句做尝试操作,它的else分支用来处理意外情况。
添加API可用检查语句 #available
可以用来针对不同的操作系统作分支
修改do-while为repeat-while
错误处理(添加)
添加章节
如何表示错误
用一个遵循ErrorType协议的枚举表示各种可能的错误
抛出错误
throw关键字放在函数/方法/闭包的参数之后,返回类型的箭头前。没有用throw关键字,不能抛出错误。
调用一个抛出错误的函数/方法/闭包,前面要用try。
捕获和处理错误
do-catch格式:
do {
try function that throws statements } catch pattern { statements }
尽量确保能捕获所有错误。
catch不指定匹配模式将匹配所有错误。
阻止错误传播
try!(强制try)调用,不必处理错误。如有错误发生,会导致运行时错误。
指定清理行为
控制权交接前始终会执行的代码:defer语句,类似java中的finally。
多个defer语句按照定义顺序倒叙执行。
协议
协议可以扩展了(添加)
协议扩展给协议实现类型添加方法和属性,也可以添加协议要求的默认实现,但以类型的实现为优先。
扩展协议可以加条件(添加)
协议扩展可以添加条件,使用where从句限制对哪些特定的实现类型才进行扩展
当一个协议实现满足多个扩展条件(添加)
一个协议实现满足多项扩展条件,如何选取??
访问控制
单元测试中的访问控制(添加)
单元测试目标的访问控制。使用@testable对测试开放,具体咋用?