我正在尝试等待信息从我的连接助手对象加载,在我显示它的视图中。我不确定如何在我看来处理这个电话。
这是基于这个问题: 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”)
}
}
答案 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)