Swift - 如何错误检查 JSON 文件?

Swift - How To Error Check JSON File?

我如何才能检查下载的 JSON 内容是否包含错误消息而不是预期内容?我已尝试验证 URL 但无法正常工作,因为错误的子域(在本例中为位置)仍然 returns 通过 JSON 内容的错误消息。如果有人能帮助我,我将不胜感激。 (注意:我想检查用户输入的无效位置,我正在使用 OpenWeatherMap API。)

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()
    })
}

假设出现错误时得到的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 完成处理程序提供一个参数,以便您可以传回成功或失败的指示,以便调用者可以适当地处理结果。