从AppDelegate在Swift上调用异步函数

时间:2018-11-30 14:56:39

标签: ios swift appdelegate

我已经实现了一个完成处理程序来处理异步功能。该完成处理程序返回一个值,该值对于设置rootViewController的VC类型至关重要。 我遇到的问题是AppDelegate希望尽快设置rootViewController。从非阻塞函数返回时。它崩溃而无需等待完成处理程序。

1

func application(_ application: UIApplication,....)-> Bool{
  ...
  someAsyncNetworkCall{(err,data){
     guard let ability = data else return { fatalError() }
     if (ability == 'ALLOW'){
       self.window?.rootViewController = stateVC
     }else{
       self.window?.rootViewController = someOtherVC
     }
  }
}

func someAsyncNetworkCall(completionHandler:@escaping(Error?,Any?)->()){
   ...
  //Networking code{
    completionHandler(nil, data)
  } 

}

未及时设置ViewController。甚至在completionHandler没有时间恢复之前,它就会崩溃。

2

func someAsyncNetworkCall(completionHandler:@escaping(Error?,String?)->()){
   ...
  //Networking code{
    completionHandler(nil, data)
  } 

  //Some stuff 
  completionHandler(nil,'ALLOW')
}

这不会崩溃,但是它几乎没有用,但是完成处理程序在这里被调用了两次。我在研究时找不到任何有用的东西。

0 个答案:

没有答案