J'essaye de créer un formulaire de réenregistrement d'utilisateur, qui devrait vérifier si l'utilisateur existe déjà. Donc, j'envoie une requête php à mon serveur mysql. Si la valeur de retour est vide, l'utilisateur n'existe pas encore.Comment attendre qu'une tâche de téléchargement se termine dans swift 3
Malheureusement, je suis vraiment bloqué par l'attente de la fin de cette vérification. J'ai essayé plusieurs solutions que j'ai trouvées googleing mais aucun d'eux n'a fonctionné. Mon code actuel utilise des sémaphores et va planter avec "erreur fatale: trouvé de manière inattendue nil lors du déballage d'une valeur optionnelle", donc le sémaphore n'attend pas que la tâche soit finie comme je l'attendrais.
Tous les conseils, seraient grandement appréciés. Merci les gars.
private func isUniqueEmail(email: String) -> Bool {
var result: Bool?
let semaphore = DispatchSemaphore(value: 1)
let requestURL = URL(string: "http://localhost/firstpostget/functions/get.php")
var request = URLRequest(url: requestURL!)
request.httpMethod = "POST"
let postParameters = "email=" + email
request.httpBody = postParameters.data(using: .utf8)
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration, delegate: nil, delegateQueue: OperationQueue.main)
let task = session.dataTask(with: request) {(data, response, error) in
var myJson: AnyObject
do{
myJson = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
if myJson.count == 0{
result = true
semaphore.signal()
} else{
result = false
semaphore.signal()
}
} catch{
//TODO
print(error)
}
}
task.resume()
semaphore.wait(timeout: .distantFuture)
return result!
}
NE PAS "ATTENDRE". N'UTILISEZ PAS DE SEMAPHORE. – matt