一系列便捷的类型、方法和一个异常层级结构,旨在简化错误处理。
请参阅 https://coopercorona.github.io/CoronaErrors/ 获取 API 文档。
所有 Error 类型都是符合 Error 协议的枚举。 每种类型在逻辑上将相似类型的错误组合在一起。 所有 Error 类型都具有对应的 Exception 类型。
当输入/输出操作无法完成时发生。
fileNotFound:在给定的路径下不存在文件或目录。permissionDenied:程序没有权限访问给定路径下的文件或目录。当操作无法完成时发生。
alreadyExists:操作的目标已经存在。missing:操作的目标不存在。当解析某种对象为另一种对象时发生。
incorrectFormat:原始对象的格式不正确,无法转换为新对象。notEnoughComponents:原始对象的格式需要特定数量的逻辑组件进行转换,但提供的组件不足。tooManyComponents:原始对象的格式需要特定数量的逻辑组件进行转换,但提供的组件过多。当变量的值以某种方式不正确时发生。
invalidArgument:函数的参数具有不正确的值。nil:当应该存在值时,值为 nil (空)。invalidState:变量具有不正确的值。 类似于 invalidArgument,但它不假设所讨论的变量是函数的参数。异常封装了一个 Error 和额外的元数据,包括一条解释性的消息和堆栈跟踪。 Exception 符合 Error,因此可以像任何其他 Error 一样抛出和捕获。 子类用于提供额外的上下文信息,并允许更具体的捕获语句。
可以按如下方式捕获异常
func throwException() { throw Exception(error: ValueError.nil, message: "nil")
do {
try throwException()
} catch let error as Exception {
// Do something with the error...
}
可以使用 where 子句捕获特定的底层错误
func throwException() { throw Exception(error: ValueError.nil, message: "nil")
do {
try throwException()
} catch let error as Exception where error.error == ValueError.nil {
// Do something with the error...
}
Exception 的子类可以重写 descriptionComponents 以在异常的字符串表示形式中包含额外的信息。 子类必须调用父类的实现并将其添加到自定义组件之前。
由 IOError 引起的异常。
由 IOError.fileNotFound 错误引起的 IOException。
由 ValueError.nil 错误引起的异常。 基于为 nil 的变量类型进行参数化。 要捕获任何类型的 NilException,而不考虑类型,请捕获 AnyNilException。 这是必需的,因为 NilException<T> 不能转换为 NilException<U>,无论 T 是否可以转换为 U,所以尝试捕获 NilException<Any> 将失败。
由 OperationError 引起的异常。
由 ParseError 引起的异常。
由 ValueError 引起的异常。 公开导致异常的值的不正确性。 ValueError<T>.expected 通过传入期望的值以及实际值来构造 ValueError 实例,自动设置 message 属性以解释期望的值。