2017-01-11 9 views
0

Как я могу проверить, содержит ли загруженный контент JSON сообщение об ошибке, а не ожидаемое содержимое? Я пытался проверить URL-адрес, но он не может работать из-за того, как ложный субдомен (местоположение в этом случае) все еще возвращает сообщение об ошибке через содержимое JSON. Буду признателен, если кто-нибудь сможет мне помочь. (Примечание: Я хочу, чтобы проверить на неправильное место, введенного пользователем, и я использую OpenWeatherMap API.)Swift - Как проверить файл JSON?

func downloadData(completed: @escaping()->()) { 
    print(url) 

    //UIApplication.shared.openURL(url as URL) 
    Alamofire.request(url).responseJSON(completionHandler: { 
     response in 
     let result = response.result 

     if let dict = result.value as? JSONStandard, let main = dict["main"] as? JSONStandard, let temp = main["temp"] as? Double, let weatherArray = dict["weather"] as? [JSONStandard], let weather = weatherArray[0]["main"] as? String, let name = dict["name"] as? String, let sys = dict["sys"] as? JSONStandard, let country = sys["country"] as? String, let dt = dict["dt"] as? Double { 

      self._temp = String(format: "%.0f °F", (1.8*(temp-273))+32) 
      self._weather = weather 
      self._location = "\(name), \(country)" 
      self._date = dt 
     } 

     completed() 
    }) 
} 

ответ

0

Предполагая, что в результате JSON имеет различное содержание, когда возникает ошибка, проверьте dict за содержание ошибки , Ниже приведен пример, предполагающий наличие ключа с именем error. Отрегулируйте по мере необходимости, исходя из того, что вы действительно получаете, когда есть ошибка.

Alamofire.request(url).responseJSON(completionHandler: { 
    response in 
    let result = response.result 

    if let dict = result.value as? JSONStandard { 
     if let error = dict["error"] { 
      // parse the error details from the JSON and do what you want 
     } else if let main = dict["main"] as? JSONStandard, let temp = main["temp"] as? Double, let weatherArray = dict["weather"] as? [JSONStandard], let weather = weatherArray[0]["main"] as? String, let name = dict["name"] as? String, let sys = dict["sys"] as? JSONStandard, let country = sys["country"] as? String, let dt = dict["dt"] as? Double { 
      self._temp = String(format: "%.0f °F", (1.8*(temp-273))+32) 
      self._weather = weather 
      self._location = "\(name), \(country)" 
      self._date = dt 
     } else { 
      // Unexpected content, handle as needed 
     } 
    } 

    completed() 
}) 

Вы должны также предоставить параметр для обработчика завершения downloadData, так что вы можете передать обратно признак успеха или неудачи, так что абонент может обработать результат соответствующим образом.

 Смежные вопросы

  • Нет связанных вопросов^_^