gpt4 book ai didi

ios - Swift 3 - 发送同步http请求

转载 作者:IT王子 更新时间:2023-10-29 05:45:25 26 4
gpt4 key购买 nike

我有以下代码:

func completeLoadAction(urlString:String) -> Int {
let url = URL(string:urlString.trimmingCharacters(in: .whitespaces))
let request = URLRequest(url: url!)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print("error=\(error)")
let ac = UIAlertController(title: "Unable to complete", message: "The load has been added to the completion queue. This will be processed once there is a connection.", preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
self.present(ac, animated: true)
return
}

let httpStatus = response as? HTTPURLResponse
var httpStatusCode:Int = (httpStatus?.statusCode)!

let responseString = String(data: data, encoding: .utf8)
print("responseString = \(responseString)")
let ac = UIAlertController(title: "Completed Successfully", message: "The "+coldel+" has been completed successfully", preferredStyle: .alert)
ac.addAction(UIAlertAction(title:"Continue", style: .default, handler: { action in self.performSegue(withIdentifier: "segueConfirmedLoad", sender: self) }))

self.present(ac, animated: true)

}
task.resume()
return httpStatusCode
}

我需要能够调用它并同时检查返回值,因为它是 http 状态代码,它会告诉我调用是否成功。

问题是因为它在 dataTask 中,我无法在此处访问响应状态代码

var httpStatusCode:Int = (httpStatus?.statusCode)!

因为在调用 Task.Resume() 之前任务不会开始,而且任务是异步的,所以它永远不会工作。

有什么解决办法吗?

最佳答案

要使其同步并等待,您可以使用如下信号量

struct Login {

static func execute() -> Bool {
let request = NSURLRequest....

var success = false
let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request, completionHandler: { _, response, error in
if let error = error {
print("Error while trying to re-authenticate the user: \(error)")
} else if let response = response as? HTTPURLResponse,
300..<600 ~= response.statusCode {
print("Error while trying to re-authenticate the user, statusCode: \(response.statusCode)")
} else {
success = true
}
semaphore.signal()
})

task.resume()
_ = semaphore.wait(timeout: DispatchTime.distantFuture)
return success
}
}

关于ios - Swift 3 - 发送同步http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40491502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com