Swift 继续假设没有互联网连接?

Swift continues to assume no internet connection?

我有以下发布请求的功能。我的想法是,如果由于没有互联网连接导致请求失败,请等待 3 秒然后重试,但是 swift 假设我重新获得互联网连接时仍然没有互联网连接。这是一个非常奇怪的错误,因为当我使用断点单步执行代码时,它按我预期的方式工作。

func PostQueueItem(queue: Queue) -> String{
    var toreturn: String = ""
    let components = URLComponents(string: queue.url)!
    //print(String(data: json!, encoding: String.Encoding.utf8))
    let myurl = components.url!
    var request = URLRequest(url: myurl)
    request.httpBody = queue.json
    request.httpMethod = "POST"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    let session = URLSession.shared
    let group = DispatchGroup()
    group.enter()
    DispatchQueue.global(qos: .background).async{
        let task = session.dataTask(with: request, completionHandler: {(data, response, error) -> Void in
            do{
                if (data != nil){
                    let returndata = try JSONDecoder().decode(String.self, from: data!)
                    toreturn = returndata.components(separatedBy: "-").first!
                    print(toreturn)
                    group.leave()
                } else {
                    sleep(3)
                    group.leave()
                }
            } catch{
                print("error")
                print("Error info: \(error)")
                group.leave()
            }
        })
        task.resume()
    }
    group.wait()
    //customer number gets returned
    if (toreturn == ""){
        return PostCustomerAccount(queue: queue)
    }
    return toreturn
}

我的队列结构

struct Queue: Codable{
    var postedTime: Date
    var title: String
    var subtitle: String
    var json: Data?
    var url: String
    var completeTime: Date?
    var returnString: String

    mutating func post(){
        returnString = PostCustomerAccount(queue: self)
        completeTime = Date()
    }
}

我的错误

NSLocalizedDescription=The Internet connection appears to be offline

感谢您的帮助!!

我删除了 PostQueueItem 函数中的睡眠并更新了我的结构以实现睡眠。现在它工作正常,我想我只是需要稍微分离代码而不是递归调用函数。

struct Queue: Codable{
    var postedTime: Date
    var title: String
    var subtitle: String
    var json: Data?
    var url: String
    var completeTime: Date?
    var returnString: String

    mutating func post(){
        returnString = PostCustomerAccount(queue: self)
        completeTime = Date()
    }
    mutating func initPost(){
        if (returnString != ""){
            return
        } else {
            post()
            sleep(8)
            initPost()
        }
    }
}