我发现了3个主要差异:
不必列出功能可能引发的所有错误,只
throws
需要一个关键字即可。使用这些错误时,速度没有明显的下降,而Java和其他语言则需要构造一个
Exception
对象并展开堆栈。在Swift中,throws
可以将关键字视为返回Either
-object 的函数,其中一个是原始返回类型,另一个是ErrorType
值。在Swift中,所有错误都需要处理或声明为抛出,因此无法从未声明正在抛出错误的方法中获取错误。(用Java术语来说,所有错误都是“检查过的异常”)



