1
こんにちはすべて私は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
}
}
私は関数に@エスケープを挿入することをお勧めします。実装が正しいかどうか分からないのです
私も誰でも拡張子を修正する方法を知って、この行で警告している
?ヘルプは非常に感謝しています!ありがとう!
ありがとう。どのように機能を使うことができますか?例えば、データを印刷して、別のシリアルタスクを実行するなどです。 @エスケープすると非同期関数は正しいですか? –
URLSessionには既に非同期機能のURLSession.shared.dataTaskがあります(、completionHandler:<(データ?, URLResponse ?, Error?)> Void>) –
ありがとうございます。私はlet data = result.0で同期を使用しようとしました。 let stringData = String(data:data!、encoding:.utf8)。エラーはありません。それは正しい方法ですか? –