J'utilise Alamofire et SVProgressHUD pour interroger une API et traiter les données. La question est qu'à l'intérieur de la file d'attente, même si je mets à jour l'interface utilisateur dans le thread principal, le résultat de la mise à jour viendra après la fin de la file d'attente. Ce que je veux faire est d'afficher un état de progression sur la barre de progression et de mettre à jour continuellement l'état de progression (float) dans une boucle. Cependant, ceci n'apparaîtra pas jusqu'à ce que toutes les choses dans la queue d'expédition soient faites. Mon code ressemble à ci-dessous. Impossible de mettre à jour l'interface utilisateur dans le thread principal dans une file d'attente de répartition. 3
ViveDispatchQueue.global(qos: .userInitiated).async(execute: {
Alamofire.request(queryURL).responseJSON() { response in
//Do something
for i in 0..<100{
//Do lots of things
DispatchQueue.main.async {
SVProgressHUD.showProgress(Float(i/100), status: "Loading...")
}
}
//Dismiss
})
Je ne pense pas que cast à float est correct pour la division entière. Vous divisez deux entiers, puis le résultat est converti en un float. Un nombre entier divisé par un nombre entier est un nombre entier. Essayez quelque chose comme: 'Float (i)/Float (100.0)' à la place et voyez si cela fonctionne. – Brandon
@Brandon Thx pour votre réponse. Je pense que ce n'est pas le problème. Si je mets mon code comme ça dans la boucle, la progression de 0.5 ne sera montrée qu'après toutes les choses faites. DispatchQueue.main.async {//SVProgressHUD.showProgress(Float(featureID)/Float(featuresNum), état: "Chargement en cours ...") SVProgressHUD.showProgress (0.5, état: "Chargement en cours ...") } –