How to know when multiple web calls have ended, to call completion

I’m fairly new to Swift and this question is probably really stupid. So bear with me please.

I have a collection of devices that I want to reset, using a Webservice call. Here is what my Function looks like now (no completion yet)

  • How to use Swift playground to display NSView with some drawing?
  • Swift & UIWebView element to hide
  • Convert Dictionary to JSON in Swift
  • How to create NS_OPTIONS-style bitmask enumerations in Swift?
  • Exporting mp4 through AVAssetExportSession fails
  • How can i disable in a Xcode project that a keyboard appears when i touch in a TextField?
  • func resetDevice(completion: () -> ()) {
        for device in devices {
            device.isValid = 0
            DeviceManager.instance.updateDevice(device).call { response in
                print("device reset")
            }
        }
    }
    

    I’m not quite sure were to call my completion, neither how to be 100% sure all calls have ended. Any help ?

    Solutions Collect From Internet About “How to know when multiple web calls have ended, to call completion”

    I’d suggest using dispatch groups:

    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
        }
    }
    

    Each device enters the group immediately, but doesn’t leave the group till the response is received. The notify block at the end isn’t called until all objects have left the group.