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)同步。但有錯誤零。那是正確的方法嗎? –