首页 > 解决方案 > 任务因超时而失败时如何显示消息

问题描述

当任务由于超时而结束时,我需要一种干净的方式来打印(“错误”)这个例子。

func getUserDataService() -> Bool{
    var getDataStatus = false

    //Create the url with NSURL
    let url = URL(string: "http://someurl")! //change the url

    //Create the session object
    let session = URLSession.shared

    //Now create the URLRequest object using the url object
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    request.timeoutInterval = 15

    //create dataTask using the session object to send data to the server
    let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in

        guard error == nil else {
            return
        }

        guard let data = data else {
            return
        }

        do {
            //create json object from data
            if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {


                if let httpResponse = response as? HTTPURLResponse {
                    if httpResponse.statusCode == 200 {

                        getDataStatus = true

                    } else {

                    }
                }
            }
        } catch let error {
            print(error)
        }
    })
    task.resume()
    return getDataStatus
}

它在失败时会打印以下内容,但我不确定在哪里控制它。

2019-05-27 13:53:58.501322-0400 AppName[60195:841789] 任务 <AB410EF3-5520-44AD-A458-DD75D1F6AD09>.<3> 完成错误 - 代码:-1001
2019-05-27 13:53 :58.505525-0400 AppName[60195:842001] 任务 <AB410EF3-5520-44AD-A458-DD75D1F6AD09>.<3> HTTP 加载失败(错误代码:-999 [1:89])

标签: swift

解决方案


请阅读文档URL 加载系统错误代码。超时错误-1001又名NSURLErrorTimedOut

在数据任务的完成处理程序中返回错误。处理它!

let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
    if let nserror = error as NSError?,
      nserror.code == NSURLErrorTimedOut {
      // do something
      return
    }

除此之外,您不能Bool从该方法返回值,您必须添加一个完成处理程序

func getUserDataService(completion: @escaping (Bool) -> Void) {

...

并打电话

completion(true)

并删除

return getDataStatus  


推荐阅读