知识卡片
throws与do-catch是编译期强制的错误传播
内容
可能失败的函数要在签名上显式标注throws,函数体内用throw抛出一个符合空协议Error的实例(通常是枚举,可携带关联值描述具体失败原因);调用者必须在调用处写try,并且这次调用必须处在do { } catch { }块内,或者所在函数自己也标注了throws——编译器强制要求错误要么当场处理、要么显式继续往外传播,不存在”忘记处理错误也能编译通过”的中间状态。catch支持和switch一样的模式匹配,可以针对具体错误类型单独处理,未匹配的则落到不带条件的catch兜底。这跟很多语言里”异常可以被悄悄忽略、只在运行时才炸出来”的非受检异常模型相反:Swift把”这个调用可能失败”的事实刻进了类型签名,从而把处理错误的责任提前到编译期检查。
参考来源
《Swift编程权威指南》第20章《错误处理》