Swift-具有后台线程的退出功能

时间:2018-08-23 02:49:22

标签: swift multithreading function return background-process

我有一个在后台执行一些循环并更新UI的函数:

func doSomething() {
    DispatchQueue.global(qos: .userInteractive).async {
        for ... {
            if ... {
                ...
                DispatchQueue.main.async {
                    //Update UI
                    ...

                    if ... {
                        // Show UIAlert
                        //Exit function
                    }
                }
            }
        }
    }
} 

我想退出该功能(因此取消了后台线程)。如果我使用return,则会显示警报,但后台线程会将数据循环到最后。我认为原因是当交换到主线程时,我超出了功能范围。

我是Swift多线程的新手,所以有什么主意吗?

1 个答案:

答案 0 :(得分:0)

据我所知,如果要停止在后台线程上运行的 for 循环的执行,则必须从后台线程本身停止该循环试图从代码的主线程块停止。尝试下面的内容:

func doSomething() {

var continueForLoop = true

DispatchQueue.global(qos: .userInteractive).async {
    for ... {
        if ... && continueForLoop{
            ...
            DispatchQueue.main.sync {
                //Update UI
                ...

                if ... {
                    // Show UIAlert
                    //Exit function
                    continueForLoop = false
                }
            }
        }else{
           break;
        }
    }
}

}

P.S。要了解iOS中的多线程,请考虑以下链接:iOS Concurrency注:仅当代码包含旧的swift语法时,才尝试了解多线程部分。