swift 2中的异步错误处理

swift 2中的异步错误处理,第1张

概述所以我在 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    }}

但这里编译器给出错误:

Cannot invoke dataTaskWithRequest@H_419_12@ with an argument List of type
(NSURLRequest,(_,_,_) throws) -> VoID)@H_419_12@

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

那么这种尝试捕获的东西在这些情况下是如何工作的呢?

不能异步抛出错误,因为该函数在错误发生时已经返回,您必须通过使用ErrorType参数调用某个函数来处理闭包内的错误,以决定您要对其执行的 *** 作.例:
import Foundationenum 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    }}
总结

以上是内存溢出为你收集整理的swift 2中的异步错误处理全部内容,希望文章能够帮你解决swift 2中的异步错误处理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1089807.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)