所以我有这段代码:
@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
}
这样可行,但如果当前正在下载的项目花费的时间更长,那么用户可以点击“结束”#34;按下&#34;进度对话框&#34;在当前项目完成之前不会被解雇。这使得&#34; End&#34;按钮无法在用户的视角中工作。
在Android中,我们可以中断AsyncTask进程并结束它。还有另一种方法可以在Swift中完成吗?比如当用户点击&#34;结束&#34;该过程应立即停止并关闭&#34;进度对话框&#34;。
答案 0 :(得分:1)
GDC不容易取消。
使用NSOperation
子类,您可以轻松快速地取消。