在Swift这种,错误(Error)用于描述可预期、可恢复的失败路径。
它通常用于表示网络可能失败、文件可能不存在、输入可能不合法等业务或环境的不确定性。
基本定义
Error是Swift标准库中的一个协议,表示该类型可以被throw,并被catch。
public protocol Error {}
只有遵循Error的类型,才能出现在throw错误中。
错误通常使用枚举类型,例如:
enum TestError: Error {
case test
}
这使用枚举的原因为,枚举是“有限集合”对应可数的失败原因,在catch或switch中,编译器可以检查错误是否有遗漏分支。
枚举还支持携带上下文信息:
enum FileError: Error {
case notFound(path: String)
case unreadable
case permissionDenied
}
捕获错误
Swift提供throws、try、catch等方法,用于捕获可能存在的错误Error。
1、throws:表示该函数在语义上可能失败:
func loadFile() throws -> Data
这表示调用者需要面对可能出现的错误Error。
2、try:表示调用可能失败:
let data = try loadFile()
3、catch:处理失败:
do {
try loadFile()
} catch {
print(error)
}
Swift在设计层面,强制显示处理失败路径。
总结
Swift中的Error使用类型系统处理失败路径,并在失败时抛出Error:
throw TestError.test
