【发布时间】:2016-04-29 16:59:58
【问题描述】:
我正在使用大量异步网络请求(顺便说一句,iOS 中的任何网络请求都需要异步)并且我正在寻找更好地处理来自 Apple 的 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,但你不能从 Apple 的闭包中抛出,因为它们没有抛出支持并且运行异步。
我看到添加到我的完成块 NSError 返回的唯一方法,但据我所知,使用 NSError 是老式的 Objective-C 方式。 ErrorType 只能用于 throws (afaik)。
在使用 Apple 网络关闭时,处理错误的最佳和最现代的方法是什么?据我了解,任何异步网络功能都没有任何用处?
【问题讨论】:
-
您可以使用不带 throws 的 ErrorType。即在您的完成处理程序中返回它。也许您可能想看看 Alamofire 如何处理响应/错误github.com/Alamofire/Alamofire/blob/master/Source/Result.swift
标签: swift asynchronous throw nserror