swift - 为什么 swift 不执行主队列?

标签 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]
            }

你能帮我吗?
谢谢!

最佳答案

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

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

关于swift - 为什么 swift 不执行主队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51906326/

相关文章:

swift - 在 Swift 中将数组传递给具有可变数量参数的函数

ios - 使用信标管理 iOS 框架的本地通知

ios - 通用深度链接问题

c++ - 使用 opencv 进行 qt5 部署,如何修复 lib 安装路径?

macos - 如何添加 Electron DMG 背景图像?

ios - 如何在编辑模式下(在 UITableView 中)执行不同的 segue?

macos - Swift中的IOBluetoothDeviceSelectorController

c - OSAtomicCompareAndSwapPtrBarrier 的适当转换

python - Pycares 的构建轮 (Setup.Py) 错误

macos - 如何使用符号链接(symbolic link)在 Mac OS 中使用 emacs