2016-10-07 85 views
0

我對Swift相當陌生,這個問題可能真的很愚蠢。請耐心等待。如何知道多個網絡通話何時結束,以完成通話

我有一個collection設備,我想重置,使用Webservice調用。這裏是我的Function貌似現在(沒有完成尚未)

func resetDevice(completion:() ->()) { 
    for device in devices { 
     device.isValid = 0 
     DeviceManager.instance.updateDevice(device).call { response in 
      print("device reset") 
     } 
    } 
} 

我不太清楚是叫我完成,無論怎樣,以確保100%的所有呼叫已經結束。任何幫助?

+1

只是一個想法:對於每個設備響應增加一個計數器,並檢查計數器是否等於'devices.count',當值相等時,您知道所有設備已更新,您可以調用您的完成塊。 – Laffen

回答

1

我建議使用調度組:

func resetDevice(completion:() ->()) { 
    let dispatchGroup = DispatchGroup() 

    for device in devices { 

     dispatchGroup.enter() 

     device.isValid = 0 

     DeviceManager.instance.updateDevice(device).call { response in 
      print("device reset") 
      dispatchGroup.leave() 
     } 
    } 

    dispatchGroup.notify(queue: DispatchQueue.main) { 
     // Some code to execute when all devices have been reset 
    } 
} 

每個設備立即進入集團,但直到接收到響應不離開組。直到所有對象都離開組後,纔會調用最後的通知塊。

+1

太棒了!感謝兄弟 –

+1

我想你想把'notify'調用移到for循環的OUTSIDE。 –

相關問題