I hope this is something you can use:
class ViewController: UIViewController , NSURLSessionDownloadDelegate {
var download : NSURLSessionDownloadTask?
var backgroundSession : NSURLSession?
override func viewDidLoad() {
super.viewDidLoad()
let sessionConfiguration : NSURLSessionConfiguration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("CustomBackgroundIdentifier")
backgroundSession = NSURLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: NSOperationQueue.mainQueue())
var btn = UIButton(frame: CGRectMake(0, 0, 100, 100))
btn.backgroundColor = UIColor.redColor()
btn.addTarget(self, action: "startDownload", forControlEvents: UIControlEvents.TouchDown)
self.view.addSubview(btn)
var btn2 = UIButton(frame: CGRectMake(0, 120, 100, 100))
btn2.backgroundColor = UIColor.blueColor()
btn2.addTarget(self, action: "cancelDownload", forControlEvents: UIControlEvents.TouchDown)
self.view.addSubview(btn2)
}
func startDownload() {
if download == nil {
if let url = NSURL(string: "http://www.stackoverflow.com") {
download = backgroundSession?.downloadTaskWithURL(url)
download?.resume()
}
} else {
resumeDownload()
}
}
func pauseDownload() {
if download != nil {
download?.suspend()
}
}
func resumeDownload() {
if download != nil {
download?.resume()
}
}
func cancelDownload() {
if download != nil {
download?.cancel()
}
}
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
println("Session %@ download task %@ finished downloading to URL %@\n",
session, downloadTask, location)
}
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
println("downloaded: %i",totalBytesWritten)
}
}