我正在使用大量的异步网络请求(顺便提一下,在iOS中任何网络请求都需要异步处理),并且我正在寻找更好的方法来处理苹果的dataTaskWithRequest
返回的错误,因为它不支持throws
。
我的代码如下:
func sendRequest(someData: MyCustomClass?, completion: (response: NSData?) -> ()) {
let request = NSURLRequest(URL: NSURL(string: "http://google.com")!)
if someData == nil {
// throw my custom error
}
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
// here I want to handle Apple's error
}
task.resume()
}
我需要解析可能的自定义错误并处理dataTaskWithRequest
中可能发生的连接错误。Swift 2引入了throws
,但是你不能从苹果的闭包中抛出异常,因为它们不支持throw并且是异步运行的。
我只能想到一种方法,那就是在我的完成块中添加返回NSError
,但据我所知,使用NSError
是旧版Objective-C的方式。ErrorType
只能与throws一起使用(我认为)。
在使用苹果网络闭包时,最好和最现代的处理错误的方法是什么?我理解任何异步网络函数中都无法使用throws?