Swift 等待两个不同的REST/网络呼叫完成

Swift 等待两个不同的REST/网络呼叫完成,swift,dispatch-async,Swift,Dispatch Async,我使用REST进行了很多调用,并决定将这些连接调用分离到一个单独的对象中,从我的UI类中调用。这是我正在使用的函数,它不会等待请求完成。我不确定我做错了什么,并尝试使用了许多非堆栈和网络示例,包括: 你必须使用 dg.enter()在调用任务之前 dg.在任务完成后离开() 像这样: func ConnectionHandler() { let dg = DispatchGroup() switch self.RequestType { case aReq

我使用REST进行了很多调用,并决定将这些连接调用分离到一个单独的对象中,从我的UI类中调用。这是我正在使用的函数,它不会等待请求完成。我不确定我做错了什么,并尝试使用了许多非堆栈和网络示例,包括:

你必须使用

dg.enter()在调用任务之前

dg.在任务完成后离开()

像这样:

func ConnectionHandler()
{

    let dg = DispatchGroup()

    switch self.RequestType
    {
    case aRequest:
        //if I make a single call here, works fine 
    case bRequest:
        //if I make a single call here, works fine 
    case abRequest:
        //when making requests for both type a and b, can’t get it to work
        dg.enter()

        loader.perform(request: self.userDataRequest)
        { response in
            do
            {
                let json = try response.responseJSON()
                self.structWrapper.aArray = self.loadAArray(dict: json)
            }
            catch let error {
                self.didCancelOrFail(error)
            }

           dg.leave()
        }
        self.dexRequestType = DexRequestTypesEnum.glucoseValues

        dg.enter()

        loader.perform(request: self.userDataRequest)
        { response in
            do
            {
                let json = try response.responseJSON()
                self.structWrapper.bArray = self.loadBArray(dict: json)                }
            catch let error {
                self.didCancelOrFail(error)
            }

          dg.leave()
        }

        group.notify(queue: .main) 
        {
            //will print, but requests are not complete, arrays are empty, even though breakpoints hit in loading them.
          for x in self.structWrapper.aArray                  
           {
             print(x.displayTime + ":" + x.units)
           }
           for y in self.structWrapper.bArray
           {
            print(y.displayTime + ":" + String(y.someNumber) 
           }
            print(“tasks complete”)
         }

    }

}
func ConnectionHandler()
{

    let dg = DispatchGroup()

    switch self.RequestType
    {
    case aRequest:
        //if I make a single call here, works fine 
    case bRequest:
        //if I make a single call here, works fine 
    case abRequest:
        //when making requests for both type a and b, can’t get it to work
        dg.enter()

        loader.perform(request: self.userDataRequest)
        { response in
            do
            {
                let json = try response.responseJSON()
                self.structWrapper.aArray = self.loadAArray(dict: json)
            }
            catch let error {
                self.didCancelOrFail(error)
            }

           dg.leave()
        }
        self.dexRequestType = DexRequestTypesEnum.glucoseValues

        dg.enter()

        loader.perform(request: self.userDataRequest)
        { response in
            do
            {
                let json = try response.responseJSON()
                self.structWrapper.bArray = self.loadBArray(dict: json)                }
            catch let error {
                self.didCancelOrFail(error)
            }

          dg.leave()
        }

        group.notify(queue: .main) 
        {
            //will print, but requests are not complete, arrays are empty, even though breakpoints hit in loading them.
          for x in self.structWrapper.aArray                  
           {
             print(x.displayTime + ":" + x.units)
           }
           for y in self.structWrapper.bArray
           {
            print(y.displayTime + ":" + String(y.someNumber) 
           }
            print(“tasks complete”)
         }

    }

}