Bonjour à tous ceux que je suis sur le point de créer une extension pour URLSession
dans swift 3 pour créer une requête synchrone et asynchrone. Voici mon implémentationIOS Swift 3 créer une extension URLSession pour une requête synchrone et asynchrone
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
}
}
Je Xcode me conseille d'insérer la @escaping à la fonction. Je ne sais pas si la mise en œuvre est correcte
j'ai aussi un avertissement à cette ligne
Quelqu'un sait comment corriger l'extension? L'aide est très appréciable! Merci!
Merci beaucoup. Comment pouvons-nous utiliser la fonction? par exemple pour imprimer les données et ensuite exécuter une autre tâche en série? la fonction asynchrone est-elle correcte avec @escaping? –
URLSession a déjà une fonction Async URLSession.shared.dataTask (avec:, completionHandler: <(Data ?, URLResponse ?, Erreur?) -> Void>) –
merci donc nous pouvons utiliser l'async par défaut pas besoin d'envelopper? J'ai essayé d'utiliser le synchrone avec let data = result.0 let stringData = Chaîne (données: données!, Codage: .utf8). mais avoir une erreur nulle. Est-ce la bonne façon? –