我尝试在Swift 2中处理错误。但我不确定的一件事是如何使其适用于异步回调函数。假设我正在从后端加载资源。我定义了以下错误类型:
enum NetworkError: ErrorType {
case NoConnection
case InvalidJSON
case NoSuccessCode(code: Int)
}
我计划在出现问题时抛出这些案例之一。以下是进行网络调用的函数:
func loadRequest<T: Decodable>(request: NSURLRequest, callback:T -> Void) throws {
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) { data, response, error in
// Other code that parses json and at somewhere it throws
throw NetworkError.NoConnection
}
}
但是编译器报错:
无法通过类型为
(NSURLRequest, (_,_,_) throws) -> Void
的参数列表调用dataTaskWithRequest
由此可以看出,当使用 throws
声明同一闭包类型时,它被认为是不同的类型。
那么在这些情况下,这种 do-try-catch 怎么工作呢?