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