iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 重试URLSession dataTask的模式?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是iOS / Swift开发的新手,我正在开发一个向REST API提出多个请求的应用程序.以下是检索“消息”的其中一个调用的示例:

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更改的数据更新:

(例如,填充数据或加载图像的表格)一般经验法则是以非阻碍方式通知用户,如下所示:

然后有一个pull-to-refresh控件或刷新按钮.

对于不影响用户操作或行为的后台数据更新:

你可以根据代码轻松地在你的请求结果中添加一个重试计数器 – 但是我要小心这个并建立一些更智能的逻辑.例如,给定以下状态代码,您可能希望以不同方式处理事物:

> 5xx:您的服务器出了问题.您可能希望延迟重试30秒或一分钟,但如果它发生3或4次,您将要停止锤击您的后端.
> 401:经过身份验证的用户可能无法再被授权调用您的API.你根本不想重试这个;相反,您可能希望将用户注销,以便下次他们使用您的应用时,系统会提示他们重新进行身份验证.
>网络超时/丢失连接:在重新建立连接之前,重试无关紧要.您可以在可达性处理程序周围编写一些逻辑,以便在下次网络连接可用时对后台请求进行排队.

最后,正如我们在评论中提到的那样,您可能希望查看通知驱动的后台应用程序刷新.这是在不对轮询服务器进行更改的情况下,您可以发送通知,告诉应用程序即使在前台未运行时也要自行更新.如果你足够聪明,你可以让你的服务器重复通知你的应用程序,直到应用程序确认收到 – 这将以一致的方式解决连接失败和无数其他服务器响应错误代码.

大佬总结

以上是大佬教程为你收集整理的ios – 重试URLSession dataTask的模式?全部内容,希望文章能够帮你解决ios – 重试URLSession dataTask的模式?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。