swift 2中的异步错误处理
发布时间:2020-12-14 02:27:20 所属栏目:百科 来源:网络整理
导读:所以我在 swift 2中尝试了错误处理的事情.但是我不确定的一件事是如何让它适用于异步回调函数.假设我从后端加载资源.我定义了我的错误类型,如下所示: enum NetworkError: ErrorType { case NoConnection case InvalidJSON case NoSuccessCode(code: Int)}
所以我在
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 } } 但这里编译器给出错误:
从这里可以看出,当使用throws声明时,相同的闭包类型被视为不同的类型. 那么这种尝试捕获的东西在这些情况下是如何工作的呢?
不能异步抛出错误,因为该函数在错误发生时已经返回,您必须通过使用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,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 } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |