If I create a NSURLSessionDownloadTask
, and later cancel it before it finishes, the completion block still fires seemingly.
let downloadTask = session.downloadTaskWithURL(URL, completionHandler: { location, response, error in
...
}
How do I check whether or not the download task was cancelled within this block so that I don't try to operate on the resulting download when there isn't one?
For download task, the completion handler will be called with nil
value for the location
and the code
value of the URLError
object will be .cancelled
. For example:
let task = session.downloadTask(with: url) { location, response, error in
if let error = error as? URLError {
if error.code == .cancelled {
// canceled
} else {
// some other error
}
return
}
// proceed to move file at `location` to somewhere more permanent
}
task.resume()
Or look for the code
value of the NSError
object of NSURLErrorCancelled
:
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()
The process of casting the error
parameter is the same for data tasks, as the download task above.
For Swift 2, see previous revision of this answer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With