1
嗨,我将在swift 3中为每个人创建URLSession
的扩展以创建同步请求和异步请求。这里是我的实现IOS Swift 3为同步请求和异步请求创建URLSession扩展
extension URLSession {
func sendSynchronousRequest(request: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) {
let semaphore = DispatchSemaphore(value: 0)
let task = self.dataTask(with: request) { (data, response, error) in
completionHandler(data,response,error)
semaphore.signal()
}
task.resume()
semaphore.wait(timeout: .distantFuture)
}
func sendAsynchronousRequest(request: URLRequest, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask {
let task = self.dataTask(with: request) { data, response, error in
completionHandler(data, response, error)
}
task.resume()
return task
}
}
我有Xcode建议我插入@escaping到函数。不知道能否执行正确
任何人都知道如何正确的扩展?非常感谢帮助!谢谢!
非常感谢。我们如何使用该功能?例如打印出数据然后执行另一个串行任务?异步函数是否正确使用@escaping? –
URLSession已经有一个异步函数URLSession.shared.dataTask(与:,completionHandler:<(Data?,URLResponse?,Error?) - > Void>) –
谢谢,所以我们可以使用默认的异步无需换行?我试着用let data = result.0 let stringData = String(data:data !,编码:.utf8)同步。但有错误零。那是正确的方法吗? –