#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. Метод работает асинхронно. Результат возвращается при закрытии. Я обновил ответ.