0

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

 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那么翻译将不会与正确的单词对齐。

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

4

1 回答 1

1

在对数组进行排序之前先翻译数组。

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

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

正如你所说,这将返回一个混乱的结果。

下面的例子非常接近,需要一点润色,但你应该能够做到这一点。

  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)
 }
}
        }
于 2018-08-09T05:54:05.900 回答