当 textField 包含两个子字符串时,Open Weather Map 确实可以识别城市名称

Open Weather Map does recognize city name when textField contains two substring

如果城市名称是“La Paz”,Open Weather Map 不会 return JSON 数据,但如果用户输入一个带有一个子字符串的城市,它会 return 它,例如里士满

let urlString = "\(weatherURL)&q=\(cityName)"

我该如何解决这个问题?预先感谢您的帮助。

URL 不能包含 space 个字符。

要用 %20 替换 space 字符,您必须对 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 可能也是一个合理的解决方案。

虽然您的问题不是很清楚,但我认为问题与文本字段中的间距有关。您可以使用函数 addingPercentEncoding(withAllowedCharacters:) 来尝试。这将使字符串更 URL 安全。

否则我建议查看天气图的文档,看看它是否需要不同的数据。