为什么Swift不执行主队列?

时间:2018-08-18 07:27:30

标签: swift macos

我有很长的代码,并且在执行此代码期间可以刷新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]
            }

能帮我吗?
谢谢!

1 个答案:

答案 0 :(得分: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