如果城市名称为“La Paz”,Open Weather Map 将不会返回 JSON 数据,但如果用户输入带有一个子字符串的城市(例如:里士满。
let urlString = "\(weatherURL)&q=\(cityName)"
我该如何解决这个问题?预先感谢您的帮助。
虽然您的问题并不完全清楚,但我认为问题与文本字段中的间距有关。您可以使用函数 addingPercentEncoding(withAllowedCharacters:) 来尝试。这将使字符串的 URL 更加安全。
否则,我建议检查天气图文档,看看它是否需要不同的数据。
URL 不得包含空格字符。
要将空格字符替换为
%20
,您必须对 URL 进行编码
let weatherBase = "https://api.openweathermap.org/data/2.5/weather"
let weatherAPIKey = "••••••••••••••••••"
let city = "La Paz"
var urlComponents = URLComponents(string: weatherBase)!
let queryItems = [URLQueryItem(name: "q", value: city),
URLQueryItem(name: "appid", value: weatherAPIKey)]
urlComponents.queryItems = queryItems
if let weatherURL = urlComponents.url { ...
由于您要包含 API 密钥,甚至可能包含
units
参数 URLComponents/URLQueryItem
是一个合理的解决方案。
我遇到了同样的问题,我可以使用以下代码解决它: city = city.split(' ').join('+');