Swift - 内部有后台线程的退出功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift - 内部有后台线程的退出功能相关的知识,希望对你有一定的参考价值。
我有一个函数在后台执行一些循环并更新UI:
func doSomething() {
DispatchQueue.global(qos: .userInteractive).async {
for ... {
if ... {
...
DispatchQueue.main.async {
//Update UI
...
if ... {
// Show UIAlert
//Exit function
}
}
}
}
}
}
我想退出该函数(因此取消后台线程)。如果我使用return
,警报会显示,但后台线程会将数据循环到最后。我认为原因是当交换到主线程时,我超出了函数的范围。
我是Swift多线程的新手,所以任何想法?
答案
据我所知,如果你想停止执行在后台线程上运行的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;
}
}
}
}
附:要了解ios中的多线程,请考虑以下链接:iOS Concurrency注意:尝试仅在代码包含旧的swift语法时才了解多线程部分。
以上是关于Swift - 内部有后台线程的退出功能的主要内容,如果未能解决你的问题,请参考以下文章