我习惯于使用典型的try catch块来处理任何函数或代码块的异常,例如目标C。
然而,在向Swift跳过信仰并阅读Swift的错误处理之后;这不是我所期待的。您必须通过抛出错误并保护并检查是否所有内容来处理您的异常。
我需要一般的Swift错误处理技巧和最佳实践,特别是对于以下情况:
我使用Alamofire来调用服务,它具有闭包,并通过另一个带闭包的函数调用它。 AFAIK我不能在异步代码中抛出错误,那么这种情况的最佳做法是什么? 将尝试使用代码示例进行更新
让app中的每个函数抛出错误是否有利?以防万一 ?比如检查每个值或结果。
我可以使用单例错误处理模块吗?
提前致谢
答案 0 :(得分:2)
您必须通过抛出错误并保护并检查是否所有内容来处理您的异常。
这是一个不一定是真的假设。如果您的代码结构正确,则不必使用if let
和throw
来检查所有内容。
我需要一般的Swift错误处理技巧和最佳实践......
在您查看其他内容之前,请按顺序阅读以下页面。他们应该为您提供最佳实践的良好背景。
Error
Protocol Apple Developer Documentation 我使用Alamofire来调用服务,它具有闭包,并通过另一个带闭包的函数调用它。 AFAIK我不能在异步代码中抛出错误,那么这种情况的最佳做法是什么?
你可以。一个好的做法是将闭包作为参数传递给服务调用函数,然后在异步操作完成时调用闭包,如下所示:
functionThatCallsAService(completion: @escaping (Data?, NetworkingErrors?) -> ()) {
session.dataTask(with: request) { data, response, error in
guard error == nil else {
completion(nil, NetworkingErrors.returnedError(error!))
return
}
completion(data, nil)
}.resume()
}
enum NetworkingErrors: Error {
case errorParsingJSON
case noInternetConnection
case dataReturnedNil
case returnedError(Error)
case invalidStatusCode(Int)
case customError(String)
}
让app中的每个函数抛出错误是否有利?以防万一?比如检查每个值或结果。
如果您确定某个函数或值不会为nil /导致运行时错误/抛出错误,那么请不要检查它!但一般来说,根据上面的网页,你应该检查调用Web服务,与文件系统交互,创建复杂对象等的nil和/或错误。
我可以使用单例错误处理模块吗?
你在技术上可以,但除了记录之外,我认为没有任何理由这样做。