gpt4 book ai didi

swift - 主线程搞乱了排序

转载 作者:行者123 更新时间:2023-11-28 14:23:52 24 4
gpt4 key购买 nike

调度队列会打乱数组中的顺序,如下所述。我正在尝试对数组进行排名,然后能够对其进行翻译。到目前为止它不起作用:

 let top5 = Array(labels.sorted{ $0.confidence > $1.confidence}.prefix(upTo:5))


for lulu in top5 {

let translator = ROGoogleTranslate()

var params = ROGoogleTranslateParams()
params.source = "en"
params.target = "es"
params.text = "\(String(describing: lulu.label))"

translator.translate(params: params, callback: { (result) in

DispatchQueue.main.async {

self.textUno.text = self.textUno.text! + "\(lulu.label)" + " \(lulu.confidence*100)\n"
self.textDos.text = self.textDos.text! + "\(result)\n"

self.view.addSubview(self.textUno)
self.view.addSubview(self.textDos)
}
})
}

如果我尝试对 DispatchQueue.main.async 进行排序,那么翻译将不会与正确的词对齐。

我该如何解决这个问题,以便对数组进行排序并且翻译匹配?

最佳答案

先翻译数组再排序。

先让它更简单,确保它能正常工作,然后把所有的部分放在一起。

如果你真的想这样做,你需要在排序后将它们放入一个临时数组中,然后在最后使用它。

正如您所说,这将返回一个困惑的结果。

下面的示例非常接近,需要一些润色,但您应该可以从这里开始。

  let top5 = Array(labels.sorted{ $0.confidence > $1.confidence}.prefix(upTo:5))
var tmparr : []
var count: Int = 0
for lulu in top5 {

let translator = ROGoogleTranslate()
count = count + 1
var params = ROGoogleTranslateParams()
params.source = "en"
params.target = "es"
params.text = "\(String(describing: lulu.label))"
params.ordernumber = count
translator.translate(params: params, callback: { (result) in
tmparr.append[params]
})

}

DispatchQueue.main.async {

for lulunew in tmparr {
if (lulunew.ordernumber == correctindex){


self.textUno.text = self.textUno.text! + "\(lulu.label)" + " \(lulu.confidence*100)\n"
self.textDos.text = self.textDos.text! + "\(result)\n"

self.view.addSubview(self.textUno)
self.view.addSubview(self.textDos)
}
}
}

关于swift - 主线程搞乱了排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51759066/

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