[英]how to wait for the URLSession to finish before returning the result from a function in Swift 3
[英]Swift - How to play URLSession before finalizing a function?
我当前正在使用URLSession从Web服务器发送和接收数据,但是我遇到的问题是查询是在跟在它后面的任何其他代码的末尾执行的,例如,如果我有以下说明,则为:
_ = URLSession.shared.dataTask (with: url_request)
{(data, response, error) in
}.resume ()
print ("Hello world")
首先,您将运行“ Hello world”,然后运行http查询,如何运行URLSession,然后剩下什么代码?
URL会话是异步的,在与服务器进行来回通信时会花费一些时间。 您必须使用URLSession的变体,该变体允许您具有完成处理程序:
URLSession.shared.dataTask(with: my_url) { (response_data, url_response, communication_error) in
print ("Hello World")
}
祝好运!
这是我发现的解决方案:
let semaphore = DispatchSemaphore(value: 0)
_ = URLSession.shared.dataTask (with: url_request)
{(data, response, error) in
print("One")
semaphore.signal()
}.resume ()
_ = semaphore.wait(timeout: DispatchTime.distantFuture)
print (“Two”)
这是打印的内容:
>> One
>> Two
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.