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

问题描述 投票:0回答:1

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

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

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

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

我是Swift多线程的新手,所以任何想法?

swift multithreading function return background-process
1个回答
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;
        }
    }
}

}

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

© www.soinside.com 2019 - 2024. All rights reserved.