我有一个在后台执行一些循环并更新UI的函数:
func doSomething() {
DispatchQueue.global(qos: .userInteractive).async {
for ... {
if ... {
...
DispatchQueue.main.async {
//Update UI
...
if ... {
// Show UIAlert
//Exit function
}
}
}
}
}
}
我想退出该功能(因此取消了后台线程)。如果我使用return
,则会显示警报,但后台线程会将数据循环到最后。我认为原因是当交换到主线程时,我超出了功能范围。
我是Swift多线程的新手,所以有什么主意吗?
答案 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语法时,才尝试了解多线程部分。