问题描述
我使用枚举创建多个错误。但是我不知道如何处理这些错误。现在,我使用is
,as
来处理它。我怎样才能找到更好的方法来做到这一点。
例如:
enum URLError: Error {
case notConnectedToInternet
case timeout
...
}
enum HTTPError: Error {
case unauthorized
...
}
extension UIViewController {
func showErrorMessage(_ error: Error) {
if let error = error as? URLError {
// handle the URLError
}
if let error = error as? HTTPError {
// handle the HTTPError
}
}
}
解决方法
我认为最好使用catch
子句检查错误的类型,而不是像showErrorMessage
这样的“上帝方法”。
发现错误时,请执行以下操作:
do {
...
} catch let error as URLError {
showURLErrorMessage(error)
} catch let error as HTTPError {
showHTTPErrorMessage(error)
} catch {
showGenericErrorMessage(error)
}
每个showXXXErrorMessage
将接受相应类型的参数的地方:
func showURLErrorMessage(_ error: URLError) {
...
}
func showHTTPErrorMessage(_ error: HTTPError) {
...
}
func showGenericErrorMessage(_ error: Error) {
...
}