使用Openweathermap获取名称中包含空格的城市的天气

时间:2016-08-10 11:37:23

标签: ios swift weather-api openweathermap

我正在尝试使用此代码使用Openweathermap获取城市的天气:

func getWeatherByCity(city: String) {
    if let weatherRequestURL = NSURL(string: "\(openWeatherMapBaseURL)?APPID=\(openWeatherMapAPIKey)&q=\(city)") {
        getWeather(weatherRequestURL: weatherRequestURL)
    }
}

(完整教程http://www.globalnerdy.com/2016/04/02/how-to-build-an-ios-weather-app-in-swift-part-1-a-very-bare-bones-weather-app/

api适用于不包含空格的城市名称。

即使在主页http://openweathermap.org/上,寻找旧金山也没有结果。

这里缺少什么?

4 个答案:

答案 0 :(得分:4)

您需要用 + 符号

替换城市名称中的空格
let string = "San Francisco"
let replaced = (string as NSString).stringByReplacingOccurrencesOfString(" ", withString: "+")

enter image description here 如果你查看地址栏 - 它用plus本身替换空格。

对于此网站,我们需要删除空格: enter image description here

不确定为什么他们声称他们的搜索引擎非常灵活:)

答案 1 :(得分:2)

遵循@SaintThread建议,删除空格是通过用空字符串替换空格的出现来完成的:

containsPlacemark.locality?.replacingOccurrences(of: " ", with: "")

但在与支持团队联系后,他们建议使用下划线而不是空格。以下是他们的电子邮件的摘录:

  

事实上,空间支持被打破了。请替换它们   下划线。确实,你可以省略拼写“旧金山”的空格   作为“SanFrancisco”,但这种方式会导致意想不到的结果   一些特定的城市,“San_Francisco”是最好的形式。

因此,处理此问题的正确方法如下:

containsPlacemark.locality?.replacingOccurrences(of: " ", with: "_")

答案 2 :(得分:1)

尝试删除空格,San Francisco变为SanFrancisco。在http://openweathermap.org/它可以工作。

您可以查看此主题: https://openweathermap.desk.com/customer/portal/questions/16280015-my-city-shows-up-as-http-openweathermap-org-city-?t=535697

答案 3 :(得分:0)

今天,我遇到了同样的问题,并能够按照以下步骤进行修复:

city = city.split(' ').join('+');