当前位置: > > > Swift - 使用URLSession同步获取数据(通过添加信号量)

Swift - 使用URLSession同步获取数据(通过添加信号量)

(本文代码已升级至Swift3)

过去通过 NSURLConnection.sendSynchronousRequest() 方法能同步请求数据。从iOS9起,苹果废除 NSURLConnection,使用 URLSession 代替 NSURLConnection
 
如果想要 URLSession 也能够同步请求,即数据获取后才继续执行下面的代码,使用信号、信号量就可以实现。

样例如下:
//创建URL对象
let urlString:String="http://www.hangge.com"
let url = URL(string:urlString)
//创建请求对象
let request = URLRequest(url: url!)

let session = URLSession.shared

let semaphore = DispatchSemaphore(value: 0)

let dataTask = session.dataTask(with: request,
                   completionHandler: {(data, response, error) -> Void in
                    if error != nil{
                        print(error!)
                    }else{
                        let str = String(data: data!, encoding: String.Encoding.utf8)
                        print(str!)
                    }
                    
                    semaphore.signal()
}) as URLSessionTask

//使用resume方法启动任务
dataTask.resume()

_ = semaphore.wait(timeout: DispatchTime.distantFuture)
print("数据加载完毕!")
//继续执行其他代码.......

运行结果如下:

评论0