Достижимость в Swift 3

#swift #reachability

#swift #достижимость

Вопрос:

Я новичок в этом и, похоже, не могу понять, как использовать NSURLSession dataTaskWithResult:completion handler замену NSURLConnection.sendSynchronusRequest(request as URLRequest, returning: amp;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: amp;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:

Простое решение с обработчиком завершения

 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.
  }
}
  

Комментарии:

1. Это ПОТРЯСАЮЩЕ. Большое вам спасибо.

2. Теперь я не могу понять, как выполнить вызов. Вот что у меня есть: if Достижимость.isConnectedToNetwork() { self.gettingInfo = self.model.getInfo() } else { //Получать локальные вопросы от модели qizz self. вопросы = self.model.getLocalQuestions() }

3. Метод работает асинхронно. Результат возвращается при закрытии. Я обновил ответ.