title: Right way of determining internet speed in iOS 8
body: <p>I am following the below code which I copied and converted from a stack overflow question.</p>
  
  <p>I am getting internet speed however I am not sure, If I am doing right thing.</p>
  
  <pre><code>import UIKit
  
  class ViewController: UIViewController, NSURLConnectionDataDelegate{
  var connection:NSURLConnection!
  var length:Int!
  var startTime:NSDate!
  
  //let kMinimumMegabytesPerSecond: CGFloat = 1
  
  let kMaximumElapsedTime: CGFloat = 2.0
  
  
  
  override func viewDidLoad() {
      super.viewDidLoad()
      self.testDownloadSpeed()
      // Do any additional setup after loading the view, typically from a nib.
  }
  
  func testDownloadSpeed() {
      var url: NSURL = NSURL(string: "http://thewallpaperhost.com/wp-content/uploads/2014/12/wallpapers-hd-8000-8331-hd-wallpapers.jpg")!
      var request: NSURLRequest = NSURLRequest(URL: url)
      self.startTime = NSDate()
      self.length = 0
      self.connection = NSURLConnection(request: request, delegate: self)
      self.connection.start()
      let delayInSeconds:Int64 =  1000000000  * 2
      var popTime:dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, (Int64)(delayInSeconds ))
      dispatch_after(popTime, dispatch_get_main_queue(), {() -&gt; Void in
         if let conn = self.connection {
              self.connection.cancel()
              self.connection = nil
              self.useOffline()
          }
      })
  }
  
  func determineMegabytesPerSecond() -&gt; CGFloat {
      var elapsed: NSTimeInterval
      if (startTime != nil) {
          elapsed = NSDate().timeIntervalSinceDate(startTime)
          var d =  (Double(length) / elapsed)
          var result = CGFloat( d/1024)
          result = result * 0.0078125
          result = result * 0.0009765625
          return result
  
      }
      return -1
  }
  
  func useOnline() {
       NSLog("Successful")
       NSLog("\(determineMegabytesPerSecond())")
  
  }
  
  func useOffline() {
  
      NSLog("UnSuccessful")
      NSLog("\(determineMegabytesPerSecond())")
  }
  
  func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) {
      NSLog("data came")
      self.startTime = NSDate()
  }
  
  
  func connection(connection: NSURLConnection, didFailWithError error: NSError) {
      if let conn = self.connection {
          self.connection = nil
          useOffline()
      }
  }
  
  
  func connectionDidFinishLoading(connection: NSURLConnection) {
      self.connection = nil
  
      useOnline()
  }
  
  func connection(connection: NSURLConnection, didReceiveData data: NSData) {
      self.length  = self.length +  data.length
      NSLog("\(data.length)")
  }
  
  override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
  }
  
  }
  </code></pre>
  
  <p>I copied the code from below URL. It was in Objective C so I converted the code!</p>
  
  <p><a href="https://stackoverflow.com/questions/14532651/how-to-detect-network-signal-strenghth-in-ios-reachability">How to detect Network Signal Strength in iOS Reachability</a></p>