首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理URLSession超时

处理URLSession超时
EN

Stack Overflow用户
提问于 2020-11-17 22:14:49
回答 1查看 1.4K关注 0票数 4

我正在使用URLSession的帖子请求和获得球员名单,但有时我是获得错误“错误Domain=NSURLErrorDomain代码=-1001”,我如何处理它?

如何在“完成”中得到错误?

代码语言:javascript
复制
func addPlayer(playerCode: String, completion: @escaping (Error?) -> ()) {
    guard let url = URL(string: "\(url)") else { return }
    
    var urlRequest = URLRequest(url: url)
    urlRequest.httpMethod = "POST"
    
    let playerCode = [playerCode]
    
    let params = ["players": playerCode]
    do {
        let data = try JSONSerialization.data(withJSONObject: params, options: .init())
        
        urlRequest.httpBody = data
        urlRequest.setValue("application/json", forHTTPHeaderField: "content-type")
        
        let sessionConfig = URLSessionConfiguration.default
        sessionConfig.timeoutIntervalForRequest = 5.0
        
        DispatchQueue.global(qos: .background).async {
        URLSession(configuration: sessionConfig).dataTask(with: urlRequest) { (data, resp, err) in
    
            guard let data = data else { return }
            guard let resp = resp else { return }

            print(data)
            print(resp)
            
            guard let response = resp as? HTTPURLResponse, (200 ..< 530) ~= response.statusCode else {
                print("Error: HTTP request failed")
                return
            }
            
            if response.statusCode == 200 {
                print("Status code is 200")
                do {
                    let json = try JSONDecoder().decode(ListOfPlayers.self, from: data)

                    // I am do what I am want

                
                } catch let jsonError {
                    print("Error json serialization \(jsonError)")
                }
                
                    completion(nil)
            } else if response.statusCode == 422 {
                print("Status code is 422")
                    completion(nil)
                return
            }
  
    }.resume()
    }
    } catch {
    }
}

此外,我还尝试使用以下代码:

代码语言:javascript
复制
 guard let err = err else { return }
            if (err._code == -1001) {
                print("Oops bad connection")
            }

但是这段代码不会在“超时”期间执行

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-17 22:28:28

您可以将错误转换为URLError类型,然后使用code属性安全地检查是否为会话超时错误:

代码语言:javascript
复制
if (err as? URLError)?.code == .timedOut {
    // Handle session timeout
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64884132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档