如果我创建一个NSURLSessionDownloadTask
,然后在它完成之前取消它,那么完成块似乎仍然会触发。
let downloadTask = session.downloadTaskWithURL(URL, completionHandler: { location, response, error in
...
}
如何在此块中检查下载任务是否已取消,以便在没有下载任务时尝试对结果下载进行操作?
答案 0 :(得分:27)
对于下载任务,将使用nil
的{{1}}值调用完成处理程序,location
对象的code
值将为NSError
。在Swift 3中:
NSURLErrorCancelled
或者在Swift 2中:
let task = session.downloadTask(with: url) { location, response, error in
if let error = error as? NSError {
if error.code == NSURLErrorCancelled {
// canceled
} else {
// some other error
}
return
}
// proceed to move file at `location` to somewhere more permanent
}
task.resume()
同样,对于数据任务,将使用let task = session.downloadTaskWithURL(url) { location, response, error in
if let error = error {
if error.code == NSURLErrorCancelled {
// canceled
} else {
// some other error
}
return
}
// proceed to move file at `location` to somewhere more permanent
}
task.resume()
/ Error
调用完成处理程序,以指示是否已取消。在Swift 3中:
NSError
或者在Swift 2中:
let task = session.dataTask(with: url) { data, response, error in
if let error = error as? NSError {
if error.code == NSURLErrorCancelled {
// canceled
} else {
// some other error
}
return
}
// proceed to move file at `location` to somewhere more permanent
}
task.resume()