主线程弄乱了排序

时间:2018-08-09 04:52:03

标签: swift firebase google-api google-translate firebase-mlkit

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

 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的排序排除在外,则翻译将不会与正确的单词对齐。

如何解决此问题,以便对数组进行排序并使翻译匹配?

1 个答案:

答案 0 :(得分:1)

首先对数组进行翻译,然后对它们进行排名。

首先简化它,并确保其正常工作,然后将所有零件放在一起。

如果您确实想这样做,则需要在对它们进行排序后将它们放入一个临时数组中,然后在末尾使用它。

正如您所说,这将返回混乱的结果。

下面的示例非常接近,需要一点点修饰,但是您应该可以从中完成。

******
**abc*
*deed*
******