title: Swift save downloaded video NSURLSession
body: <p>I need to download a video from server and save the video for watch later.</p>
  
  <p>So i need to download the video and save it at app's filesystem with a custom name so far i can download the data(i guess) but can't store it.</p>
  
  <p>And no i don't wanna use extra extinsions frameworks or whatever.</p>
  
  <pre><code>@IBOutlet var progressView: ProgressView!
  
  @IBOutlet var statusLabel: UILabel!
  
  @IBOutlet var downloadButton: DownloadButton!
  
  private var downloadTask: NSURLSessionDownloadTask?
  
  @IBAction func downloadButtonPressed() {
      if let downloadTask = downloadTask {
          downloadTask.cancel()
          statusLabel.text = ""
      } else {
          statusLabel.text = "Downloading video"
          downloadButton.setTitle("Stop download", forState: .Normal)
          createDownloadTask()
      }
  }
  
  
  
  func createDownloadTask() {
      //small mp4 video link : http://techslides.com/demos/sample-videos/small.mp4
  
      let url = NSURL(string: "http://techslides.com/demos/sample-videos/small.mp4")!
  
      let downloadRequest = NSMutableURLRequest(URL: url)
      let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: self, delegateQueue: NSOperationQueue.mainQueue())
  
      downloadTask = session.downloadTaskWithRequest(downloadRequest)
      downloadTask!.resume()
  }
  
  func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
      let progress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
      progressView.animateProgressViewToProgress(progress)
      progressView.updateProgressViewLabelWithProgress(progress * 100)
      progressView.updateProgressViewWith(Float(totalBytesWritten), totalFileSize: Float(totalBytesExpectedToWrite))
  }
  
  
  func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
      statusLabel.text = "Download finished"
      print(downloadTask.response.suggestedFilename) // Gives file name
      resetView()
  }
  
  func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
      if error != nil {
          statusLabel.text = "Download failed"
      } else {
          statusLabel.text = "Download finished"
      }
      resetView()
  }
  
  func resetView() {
      downloadButton.setTitle("Start download", forState: .Normal)
      downloadTask!.cancel()
  }
  </code></pre>