2017-08-31 1 views
-1

J'ai des billets de blog stockés dans une base de données distante. Les utilisateurs peuvent évaluer et/ou commenter chaque message. Je dois donc déclencher 1 ou 2 demandes réseau différentes. Mais je dois attendre jusqu'à ce qu'ils (ou cela) se termine.Meilleures pratiques appelant 1 ou 2 fonctions asynchrones

Quelle est la meilleure pratique pour le scénario suivant:

func updateRatingAndComment(){ 
     if commentTextView.text != "" { 
      updateComment() 
     } 
     if ratingView.rating != 0.0 { 
      updateRating() 
     } 
    } 

updateComment() et updateRating() sont des appels Alamofire.

J'ai essayé d'utiliser des groupes de répartition, mais j'ai échoué. Je pense utiliser un rappel mais cela ne semble pas avoir de sens pour moi non plus.

+0

est une demande combinée pas une option? Et un rappel prend tout son sens. – vadian

+1

Mettez à jour votre question avec le code que vous avez essayé et expliquez clairement les problèmes que vous avez rencontrés. – rmaddy

+0

rmaddy. L'approche adoptée par Alexander (qui vient de répondre) était exactement ce que j'ai essayé. Je ne peux pas faire fonctionner les groupes d'expédition pour la raison que j'ai indiquée ci-dessous. –

Répondre

2

Essayez ceci:

let group = DispatchGroup() // Controller property 

..... 
     if commentTextView.text != "" { 
      group.enter() 
      updateComment() // self?.group.leave() inside callback 
     } 
     if ratingView.rating != 0.0 { 
      group.enter() 
      updateRating() // self?.group.leave() inside callback 
     } 

     group.notify(queue: .main) { [weak self] in 
      // Do something 
     } 
.... 
+0

Alexandre. Disons qu'il y a à la fois un commentaire et une note. Vous entrez le groupe de commentaires group.enter. Si le commentaire se termine avant l'évaluation, il déclenchera group.leave et group.notify se déclenchera avant que l'évaluation ne soit terminée. –

+0

Mais il y avait 2 entre. J'utilise actuellement une telle approche dans mon application pour 3 demandes et ça marche bien! –

+0

group.notify se déclenche quand entre - feuilles = 0 –