Я нашел этот другой вопрос здесь , у которого хорошая запись, однако он описывает, как использовать обработчики завершения в сеансе urlSession для перехода ... но мне было трудно применить егов моем случае.
Что я хочу сделать:
- Посмотрите текущую дату и время в формате UTC на серверах Google.
- Убедитесь, что я получил данные, прежде чем продолжить
- Сохраните эти восстановленные данные (дату и время) в строковой переменной.
То, что я написал до сих пор в коде, работает... иногда ... но это не надежно.Я часто получаю сбои, и из-за моих ограниченных знаний я смог исследовать тот факт, что это может иметь отношение к задаче, продолжающейся до того, как данные будут фактически извлечены (иногда это говорит о том, что я искал "nil ').
Вот часть, где я вызываю функцию для извлечения:
func handleDateAndTimeFetch (fetch: String, calculate: Bool) {
serverTimeReturn { (getResDate) -> Void in //Handles the value received from Google and formats it
let dFormatter = DateFormatter()
dFormatter.dateStyle = .short
dFormatter.timeStyle = .medium
dFormatter.timeZone = TimeZone(abbreviation: "UTC")
let dateAndTimeNow = dFormatter.string(from: getResDate!)
}
}
... и вот функция:
//Call Google's server for the current date & time in UTC (Coordinated Universal Time)
func serverTimeReturn(completionHandler:@escaping (_ getResDate: Date?) -> Void){
let url = URL(string: "https://www.google.com")
let task = URLSession.shared.dataTask(with: url!) {(data, response, error) in
let httpsResponse = response as? HTTPURLResponse
if let contentType = httpsResponse!.allHeaderFields["Date"] as? String {
let dFormatter = DateFormatter() //A formatter object
dFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"
let serverTime = dFormatter.date(from: contentType)
completionHandler(serverTime)
}
}
print("Retrieved date value")
task.resume()
}
... И наконец, вот ошибки, которые я получаю в разное время.Если вы можете, вы также можете помочь мне понять, что именно говорят эти ошибки?:
2018-04-25 21:05:55.071137-0400 JeegO[8768:3548654] TIC TCP Conn Failed [3:0x1c0176200]: 1:50 Err(50)
2018-04-25 21:05:55.071486-0400 JeegO[8768:3548654] Task <5C958839-0A62-4E06-A811-8ED9D8A4709C>.<1> HTTP load failed (error code: -1009 [1:50])
2018-04-25 21:05:55.078817-0400 JeegO[8768:3548645] Task <5C958839-0A62-4E06-A811-8ED9D8A4709C>.<1> finished with error - code: -1009
(lldb)
Я хочу убедиться, что могу получить эти простые данные (ДатаИ время) прежде чем я продолжу работу над своим приложением, поэтому я ДЕЙСТВИТЕЛЬНО благодарен за помощь в решении этой небольшой проблемы, поэтому я могу уверенно двигаться дальше:)
Большое спасибо!