我正在构建一个简单的天气应用程序,没有什么复杂的,我只需要从基于用户位置的开放天气图中获取JSON。这是从WOM获取JSON的正确URL结构http://api.openweathermap.org/data/2.5/weather?lat=52.516221&lon=13.408363&appid=e72ca729af228beabd5d20e3b7749713
然而,这是我的swift代码/Alamofire给我的http://api.openweathermap.org/data/2.5/weather?appid=e72ca729af228beabd5d20e3b7749713&lat=52.516221&long=13.408363
所以它把apiid=***放在url的开头而不是结尾。
这是我的密码。

 let WEATHER_URL = "http://api.openweathermap.org/data/2.5/weather"
 let APP_ID = "e72ca729af228beabd5d20e3b7749713"

  func getWeatherData(url: String, parameters : [String : String]) {
    Alamofire.request(url, method: .get, parameters: parameters).responseJSON {
        response in
        if response.result.isSuccess   {
            print ("Everything is fine")
            print (   Alamofire.request(url, method: .get, parameters: parameters))
            let weatherJSON : JSON = JSON(response.result.value!)

            print (weatherJSON)
        }
        else {
            print ("Error \(String(describing: response.result.error))")
            self.cityLabel.text = "Connection issues"
        }
    }

}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let location = locations[locations.count - 1]
        if location.horizontalAccuracy > 0 {
            locationManager.stopUpdatingLocation()

            let latitude = "52.516221"
            let longitude = "13.408363"
            let params : [String : String] = ["lat" : latitude, "long" : longitude, "appid" : APP_ID]

            getWeatherData(url : WEATHER_URL, parameters : params)
        }
    }

最佳答案

restapi中参数的顺序无关紧要。
代码的问题是传递的参数名错误。long应该是lon
http://api.openweathermap.org/data/2.5/weather?appid=e72ca729af228beabd5d20e3b7749713&lat=52.516221&lon=13.408363
http://api.openweathermap.org/data/2.5/weather?lat=52.516221&lon=13.408363&appid=e72ca729af228beabd5d20e3b7749713
以上两个请求将给您相同的结果。
试试这个。我刚把参数'long'改为lon

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let location = locations[locations.count - 1]
    if location.horizontalAccuracy > 0 {
        locationManager.stopUpdatingLocation()

        let latitude = "52.516221"
        let longitude = "13.408363"
        let params : [String : String] = ["lat" : latitude, "lon" : longitude, "appid" : APP_ID]

        getWeatherData(url : WEATHER_URL, parameters : params)
    }
}

关于swift - Alamofire将应用程序API放在url的开头而不是结尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47018783/

10-12 03:19