一系列便捷的类型、方法和一个异常层级结构,旨在简化错误处理。
请参阅 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
属性以解释期望的值。