Swift中的可达性3

时间:2016-10-21 18:59:46

标签: swift reachability

我是新手,似乎无法弄清楚如何使用NSURLSession dataTaskWithResult:completion handler替换NSURLConnection.sendSynchronusRequest(request as URLRequest, returning: &response 在以下代码中。后者已被折旧。

public class Reachability {
    class func isConnectedToNetwork() -> Bool {
        var status:Bool = false

        let url = NSURL(string: "https://google.com")
        let request = NSMutableURLRequest(url: url! as URL)
        request.httpMethod = "HEAD"
        request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringLocalAndRemoteCacheData
        request.timeoutInterval = 10.0

        var response:URLResponse?

        do {
            let _ = try NSURLConnection.sendSynchronousRequest(request as URLRequest, returning: &response) as NSData?
        }
        catch let error as NSError {
            print(error.localizedDescription)
        }

        if let httpResponse = response as? HTTPURLResponse {
            if httpResponse.statusCode == 200 {
                status = true
            }
        }
        return status
    }
}

1 个答案:

答案 0 :(得分:2)

带有完成处理程序的简单解决方案

class func isConnectedToNetwork(completion: @escaping (Bool) -> ()) {
    let url = URL(string: "https://google.com")!
    var request = URLRequest(url: url)
    request.httpMethod = "HEAD"
    request.cachePolicy = .reloadIgnoringLocalAndRemoteCacheData
    request.timeoutInterval = 10.0

    URLSession.shared.dataTask(with:request) { (data, response, error) in
      if let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 {
        completion(true)
      } else {
        completion(false)
      }
    }.resume()
}

致电

Reachability.isConnectedToNetwork { success in
  if success {
    // google is up
  } else {
    // google is down.
  }
}