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中的异步错误处理所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)