2

所以我有这个代码:

@IBAction func onStart(_ sender: Any) {
    DispatchQueue(label: "SyncQueue").async{
        for i in 0..<numberOfItemToDownload {
            // download data from the internet this may takes longer depends on the connection speed and data being download
            if isCancelled {
                DispatchQueue.main.async { // dismiss the progress ViewController (displayed modally) }
                break
            }
        }
    }
}

@IBAction func onEnd(_ sender: Any) {
        isCancelled = true
}

这可以正常工作,但如果当前正在下载的项目需要更长的时间,那么用户点击“结束”按钮,“进度对话框”在当前项目完成之前不会关闭。这使得“结束”按钮在用户的视角中不起作用。

在 Android 中,我们可以中断 AsyncTask 进程并结束它。在 Swift 中还有另一种方法吗?就像当用户点击“结束”时,该过程应该立即停止并关闭“进度对话框”。

4

1 回答 1

1

GDC 不容易取消。

使用NSOperation子类,然后您可以轻松快速地取消。

于 2017-09-29T05:13:21.300 回答