swift2中的异步错误处理

swift2中的异步错误处理,swift,Swift,所以我试着在swift 2中处理错误。但有一件事我不确定,那就是如何让它在异步回调函数中工作。假设我正在从后端加载一个资源。我定义了错误类型,如下所示: enum NetworkError: ErrorType { case NoConnection case InvalidJSON case NoSuccessCode(code: Int) } 我正计划在出现问题时抛出其中一个案例。以下是进行网络调用的函数: func loadRequest<T: Decoda

所以我试着在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
    }
}
func loadRequest(请求:NSURLRequest,回调:T->Void)抛出{
let session=NSURLSession.sharedSession()
让task=session.dataTaskWithRequest(请求){数据,响应,错误
//解析json的其他代码,以及它抛出的其他代码
抛出NetworkError.NoConnection
}
}
但这里编译器给出了错误:

无法使用类型为的参数列表调用
dataTaskWithRequest
(NSURLRequest,(\uu,\uu,\uu)抛出)->Void)

从这里可以明显看出,当使用
throws
声明相同的闭包类型时,它被视为不同的类型


那么,在这种情况下,do-try-catch是如何工作的呢?

NSURLSession.h中没有任何内容似乎会抛出异常。因此,我想知道该类是否已转换为使用此新功能。

无法异步抛出错误,因为该函数在错误发生时已返回,您必须通过使用
ErrorType
参数回调某个函数来处理闭包中的错误,以决定要对其执行的操作。例如:

import Foundation

enum NetworkError: ErrorType {
    case NoConnection
    case InvalidJSON
    case NoSuccessCode(code: Int)
}


func getTask() -> NSURLSessionDataTask? {
    let session = NSURLSession.sharedSession()
    let urlRequest = NSURLRequest(URL: NSURL(string: "www.google.com")!)
    return session.dataTaskWithRequest(urlRequest) { data, response, error in
        if let error = error {
            asyncError(error)
        } else {
            // Do your stuff while calling asyncError when an error occurs
        }
    }
}

func asyncError(error: ErrorType) {
    switch error {
    case NetworkError.NoConnection:
        // Do something
        break
    default:
        break
    }
}