0

在执行此代码期间,我有一个很长的代码和 UI 要刷新,以便通知用户。

我尝试这样做,dispatchQueue但 Swift 不执行里面的代码dispatchQueue.main.async{}。为什么?

这是我的代码的开头:

    @IBAction func btnSave(_ sender: Any) {
    DispatchQueue.global(qos: .userInitiated).async {
        profondeur = Int((self.niveauRecherche.selectedItem?.title)!)!
        //recupere l'URL saisie
        let myURLString : String = self.textUrl.stringValue
        let url = URL(string:self.textUrl.stringValue)
        DispatchQueue.main.async {                  //this code is not executed
            self.txtLog.stringValue="Veryfing first URL"
            print("ok")
        }
        //verifie la validite de l'URL de départ
        if self.checkURL(urlString: myURLString){
            UserDefaults.standard.set(myURLString, forKey: "Last_URL")
            //Ajoute l'URL de départ dans le tableau des URL
            urlArray.append([1 as AnyObject,myURLString as AnyObject])
            //recupere le nom de domaine
            let domain=url?.host
            let domainString:String=String(describing: domain!)
            let elements = domainString.components(separatedBy: ".")
            let nbElements = elements.count
            switch nbElements {
            case 3:
                nomDeDomaine=elements[1]
            default:
                nomDeDomaine=elements[0]
            }

你能帮我吗?
谢谢!

4

1 回答 1

0

如果您希望您的代码按照您编写的顺序执行,即转到后台线程,然后转到主线程,然后返回后台线程,那么您必须像这样编写代码:

DispatchQueue.global(qos: .background).async {
    // Background Thread
    print("background 1")
    DispatchQueue.main.async {
        // Run UI Updates or call completion block
        self.myLabel.text = "I have changed"
        print("Main thread")
        DispatchQueue.global(qos: .background).async {
            print("background 2")
        }
    }
}

这将打印:

background 1
Main thread
background 2
于 2018-08-18T10:14:37.690 回答