gpt4 book ai didi

swift - 在运行第二个 Swift 之前等待代码块

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

我正在使用位于 here 的异步库。我的代码如下:

let backgroundBlock = Async.utility {
for serial in serialarray
{
self.getVersion(serial: serial)
}
}



backgroundBlock.main {
print(serialarray)
print(versionarray)
SwiftSpinner.hide()
}

如果我理解正确, getVersion 应该在后台运行,直到完全完成,然后第二个 block 应该运行并打印出我的两个数组。相反,第一个数组被打印,但第二个数组显示为空白。我在 getVersion 函数中添加了一个 print 来查看它是否正常工作,并且我可以看到所有值都已填充,因此看起来第一个 block 在打印数组之前没有等待完成。我做错了什么吗?

编辑:

为了更清楚起见,上面的代码是在一个简单的 alamofire 请求的完成处理程序中执行的。 getVersion函数如下:

Alamofire.request("url=\(serial)", headers: httpheader).validate().responseData { response in

switch response.result {

case .success:

if let data = response.data {

let xml = SWXMLHash.parse(data)

var count: Int = 0

var stop = false

for elem in xml["deviceSoftwares"]["deviceSw"].all

{

for elem2 in elem["swAttrs"].all

{


if stop == false

{
count += 1

if (elem2["value"].element!.text) == "com.fiberlink.maas360.fpl"
{
stop = true
}

}

}
}


let position = (count/5)


SwiftSpinner.hide()

if stop == true

{
let version = xml["deviceSoftwares"]["deviceSw"][position]["swAttrs"][2]["value"].element!.text

versionarray.append(version)
}

else

{
versionarray.append("N/A")


}

print (versionarray)

}

case .failure(_):

let errorCode = response.response?.statusCode
let errorString = String(describing: errorCode!)
print("Error " + errorString)


}

}

编辑2:

我还尝试了以下方法:

let group = AsyncGroup()

group.utility {

for serial in serialarray

{

self.getVersion(serial: serial)

}

}

group.wait()


print (serialarray)
print (versionarray)

SwiftSpinner.hide()

两个打印都在 getVersion 完成循环以填充数组之前执行。

最佳答案

Alamofire.request 是一个异步调用,因此它将立即返回,因此您的方法 getVersion 将立即返回。您需要让 getVersion 方法等待,直到 Alamofire.request 完成调用并且版本数组更新后才能继续。

关于swift - 在运行第二个 Swift 之前等待代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45126109/

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