我正在使用OpenWeather Current Weather Data Api,并试图通过url请求从Swift5中的Api获取json数据。我需要打印json数据。以下是我在网上找到的一些代码,我一直在尝试使用,但一直没有成功。
注意:我不想使用任何外部库。就像阿拉莫菲尔。
let url = URL(string: "https://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid={APIKEY}")!
var request = URLRequest(url: url)
let session = URLSession.shared
let task = session.dataTask(with: request) { (data, response, error) in
if let error = error {
print(error)
} else if let data = data {
print(data)
} else {
print("nope")
}
}
task.resume()
Openweathermap API文档有点误导,表达式{API key}
表示API键没有大括号。
使用字符串插值插入密钥
let url = URL(string: "https://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=(APIKEY)")!
不需要URLRequest
,dataTask
返回有效数据或错误
let task = URLSession.shared.dataTask(with: url) { (data, _, error) in
if let error = error { print(error); return }
print(String(data: data!, encoding: .utf8)!)
}
task.resume()
为了显示数据,创建一个合适的模型,并使用JSONDecoder
对数据进行解码
因此,首先您应该知道您已经注册,并且已经拥有自己的API密钥。此处可能出现未打开链接的主要原因是您正在使用免费订阅,并尝试请求其他订阅中可用的数据。对于未来,如果你想只做获取请求,你不需要做会话。dataTask(with:request(,会话即可。dataTask(with:url(即可。(
以下是您的代码的更简单的方法。
guard let url = URL(string: "https://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid={APIKEY}") else {return}
let session = URLSession.shared
let task = session.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error)
} else if let data = data {
print(data)
} else {
print("nope")
}
}
task.resume()