等待任务从另一个对象(类)完成

时间:2018-06-06 17:45:12

标签: swift dispatch-async

我正在尝试等待信息从我的连接助手对象加载,在我显示它的视图中。我不确定如何在我看来处理这个电话。

这是基于这个问题: Waiting for two different REST/Network calls to complete

class ConnectionAPI
{
func getABStructWrapper() -> ABStructWrapper
{
    ConnectionHandler()
    return self.structWrapper
}

//let loader = from Oauth2/p2_OAuth2 pod to load JSON
//other general func and var’s 
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()
        }

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

       //This works! but want to do this from a view
       //commented out in xcode:
        dg.notify(queue: .main) 
        {

          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 getValues
{

        let dg = DispatchGroup()
        dg.enter()
        self.StructWrapper = ConnectionAPI.getABStructWrapper()
        dg.leave()
        dg.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”)
        }
}

1 个答案:

答案 0 :(得分:0)

在请求类中,您需要完成处理程序

data

注意您需要处理错误案例并发送

class ConnectionAPI {

   static let shared = ConnectionAPI()

   func ConnectionHandler(completion:@escaping(_ finished:Bool)->void) {

      //
      //

     dg.notify(queue: .main) {

       completion(true)
     }

   }

}

//

您不需要在视图中使用任何DispatchGroup,因为您已在网络类中使用它们

completion(false)