Отправка очереди приводит к нарушению порядка в массиве, как указано ниже. Я пытаюсь ранжировать массив, а затем переводить его. Пока это не работает:
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)
}
}
}