gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:26:05 26 4
gpt4 key购买 nike

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

它是基于这个问题构建的: 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”)
}
}

最佳答案

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

class ConnectionAPI {

static let shared = ConnectionAPI()

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

//
//

dg.notify(queue: .main) {

completion(true)
}

}

}

注意您需要处理错误情况并发送

completion(false)

//

您在 View 中不需要任何 DispatchGroup,因为您已经在网络类中完成了它们

func getValues() {
ConnectionAPI.shared.ConnectionHandler { (finished) in

if finished {
print(ConnectionAPI.shared.aArray)
}
}
}

关于swift - 等待另一个对象(类)完成任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50726516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com