2017-03-27 2 views
0

J'ai une requête Alamofire dans le cadre d'une fonction et j'ai besoin que la requête soit complétée avant que le reste de la fonction ne soit exécuté. Vous pouvez voir la fonction complète ci-dessous. J'utilise ici swiftyJSON pour analyser la réponse et assigner des valeurs à un objet. J'ai besoin de la requête Alamofire pour terminer avant que toute la fonction soit terminée. Toutes les suggestions seraient très appréciées!Vous devez attendre la fin de la requête Alamofire avant de continuer - Swift

+0

Pourriez-vous simplement déplacer le code de présentation modale vers le bloc d'achèvement de demande de réseau (et probablement aussi le faire tourner sur le thread principal, je pense que c'est nécessaire)? Le code dans le bloc d'achèvement se produit après la fin de la requête. –

Répondre

0

Fondamentalement, vous devrez déplacer le code après la demande Alamofire dans la fermeture de la demande. Le code à l'intérieur de la fermeture de la requête ne se déclenchera qu'une fois la requête terminée avec succès ou échouera (erreur du serveur, timeout, etc.) Le code suivant devrait fonctionner pour vous.

@IBAction func btnScanPressed(_ sender: Any) { 
// Retrieve the QRCode content 
// By using the delegate pattern 
readerVC.delegate = self 

readerVC.completionBlock = { (result: QRCodeReaderResult?) in 
    print(result?.value) 

Alamofire.request((result?.value)!).responseString { response in 
    debugPrint(response) 

    if let json = response.result.value { 

     let returnedJSON = JSON.init(parseJSON: json); 


     //TESTED -> this section does work and does update the values 

     self.co.setVideoURL(url: (returnedJSON["VideoURL"].string)!) 

     self.co.setDisplayText(text: returnedJSON["DisplayText"].string!) 

     self.co.setHasUpdated(value: true) 


     print("VARIABLES NOW SET") 


     // Presents the readerVC as modal form sheet (This needs to happen AFTER the Alamofire has completed) 
     self.readerVC.modalPresentationStyle = .formSheet 

     self.present(readerVC, animated: true, completion: nil) 

    } 


} 

} 



} 
+0

Merci! Cela a fonctionné pour moi. Je savais que ce serait quelque chose d'évident, je pense que je regardais ça trop longtemps pour voir la solution juste devant moi. À votre santé! –

0

Pourquoi ne pas mettre ces 2 dernières lignes dans le bloc de feu alamo?