Swift5 中的 URLRequest

URLRequest in Swift5

我正在使用 OpenWeather 当前天气数据 Api,并尝试发出 url 请求以从 Swift5 中的 api 获取 json 数据。我需要打印 json 数据。这是我在互联网上找到的一些代码,我一直在尝试使用,但一直没有用。

注意:我不想使用任何外部库。像 alamofire.


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()

所以,首先您应该知道您已经注册并且已经拥有自己的 API 密钥。此处未打开 link 的主要原因是您正在使用免费订阅并尝试请求其他订阅中可用的数据。对于未来,如果你只想得到请求,你不需要做 session.dataTask(with: request)session.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()

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 returns 有效数据或错误

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

解码数据