2017-08-31 33 views
-1

我有存儲在遠程數據庫中的博客文章。用戶可以評價和/或評論每篇文章。所以我需要關閉1或2個不同的網絡請求。但我必須等到他們(或它)完成。調用1或2個異步函數的最佳實踐

什麼是以下情形的最佳做法:

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

updateComment()updateRating()是Alamofire調用。

我試過使用調度組,但失敗了。我正在考慮使用回調,但這對我來說似乎也沒有任何意義。

+0

是一個組合的請求不是一種選擇?回調是非常有意義的。 – vadian

+1

用你試過的代碼更新你的問題,並清楚地解釋你有什麼問題。 – rmaddy

+0

rmaddy。亞歷山大(剛剛回答)採取的方法正是我所嘗試的,我無法讓調度小組工作,我之所以這樣說。 –

回答

2

試試這個:

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

亞歷山大。假設有評論和評分。您輸入評論集合group.enter。如果評論在評分完成之前完成,它將觸發group.leave和group.notify將在評級完成之前觸發。 –

+0

但是有2個輸入。我目前在我的應用程序中使用這種方法3請求,它工作正常! –

+0

group.notify會在進入時觸發 - 葉== 0 –