У меня есть следующий код:Swift 3 - Отправить сделать синхронное HTTP запрос
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() вызывается, и задача является асинхронной, так это никогда не будет работать.
Есть ли способы обойти это?
Зачем вам нужно синхронно? – Larme
Мне нужно проверить код ответа из http-запроса. Было ли мое понимание, что это невозможно сделать, если это было async –
Это можно сделать async, вы можете просто удалить семафоры и проверить, но тогда вам понадобится блок завершения для вызова вместо вызова возврата, как показано в блоке ниже. – darren102