大佬教程收集整理的这篇文章主要介绍了ios – 重试URLSession dataTask的模式?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
func getmessages() { let endpoint = "/apI/Outgoingmessages" let parameters: [String: Any] = [ "limit" : 100,"sortOrder" : "ASC" ] guard let url = createURLWithComponents(endpoint: endpoint,parameters: parameters) else { print("Failed to create URL!") return } do { var request = try URLrequest(url: url,method: .get) let task = URLSession.shared.dataTask(with: request as URLrequest) { (data,response,error) in if let error = error { print("request Failed with error: \(error)") // TODO: retry Failed request } else if let data = data,let response = response as? httpURLResponse { if response.statusCode == 200 { // process data here } else { // TODO: retry Failed request } } } task.resume() } catch { print("Failed to construct URL: \(error)") } }
当然,此请求可能由于多种原因而失败(服务器无法访问,请求超时,服务器返回200以外的其他内容等).如果我的请求失败,我希望能够重试它,甚至可能在下一次尝试之前延迟.我在Apple的文档中没有看到关于这种情况的任何指导,但我发现了几个关于SO的相关讨论.不幸的是,这两个都是几年前和Objective-C,我从来没有与之合作过.是否有任何常见的模式或实现在Swift中做这样的事情?
对于触发UI更改的数据更新:
(例如,填充数据或加载图像的表格)一般经验法则是以非阻碍方式通知用户,如下所示:
你可以根据代码轻松地在你的请求结果中添加一个重试计数器 – 但是我要小心这个并建立一些更智能的逻辑.例如,给定以下状态代码,您可能希望以不同方式处理事物:
> 5xx:您的服务器出了问题.您可能希望延迟重试30秒或一分钟,但如果它发生3或4次,您将要停止锤击您的后端.
> 401:经过身份验证的用户可能无法再被授权调用您的API.你根本不想重试这个;相反,您可能希望将用户注销,以便下次他们使用您的应用时,系统会提示他们重新进行身份验证.
>网络超时/丢失连接:在重新建立连接之前,重试无关紧要.您可以在可达性处理程序周围编写一些逻辑,以便在下次网络连接可用时对后台请求进行排队.
最后,正如我们在评论中提到的那样,您可能希望查看通知驱动的后台应用程序刷新.这是在不对轮询服务器进行更改的情况下,您可以发送通知,告诉应用程序即使在前台未运行时也要自行更新.如果你足够聪明,你可以让你的服务器重复通知你的应用程序,直到应用程序确认收到 – 这将以一致的方式解决连接失败和无数其他服务器响应错误代码.
以上是大佬教程为你收集整理的ios – 重试URLSession dataTask的模式?全部内容,希望文章能够帮你解决ios – 重试URLSession dataTask的模式?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。