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()
}
}
}
我有以下发布请求的功能。我的想法是,如果由于没有互联网连接导致请求失败,请等待 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()
}
}
}