首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >URLRequest in Swift5

URLRequest in Swift5
EN

Stack Overflow用户
提问于 2022-03-03 09:31:31
回答 3查看 132关注 0票数 0

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

注意:我不想使用任何外部库。就像阿拉莫火一样。

代码语言:javascript
复制
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()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-03-03 13:58:14

Openweathermap文档有点误导,表达式{API key}表示没有大括号的API键

插入带字符串插值的键

代码语言:javascript
复制
let url = URL(string: "https://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=\(APIKEY)")!

不需要URLRequestdataTask返回有效数据或错误。

代码语言:javascript
复制
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对数据进行解码

票数 0
EN

Stack Overflow用户

发布于 2022-03-03 11:44:05

因此,首先您应该知道您已经注册并已经拥有自己的API密钥。此处不打开链接的主要原因是您正在使用免费订阅,并尝试请求其他订阅中可用的数据。将来,如果您只想做get请求,则不需要执行session.dataTask(with: request)session.dataTask(with: url)就可以了。

下面是您代码的更简单的方式。

代码语言:javascript
复制
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()
票数 0
EN

Stack Overflow用户

发布于 2022-10-19 12:59:27

并不是所有的API都只使用URL

因此,如果API请求中有一个标头,请尝试下面的代码。

注意:标题依赖于您的API。

代码语言:javascript
复制
 let semaphore = DispatchSemaphore (value: 0)
    let param = [
        "language": "english",
        "serviceRequestId": 1,
        "location": ["latitude": "12.34","longitude": "12.34"]
    ] as [String : Any]
    
    var request = URLRequest(url: URL(string: "UrlHere")!,timeoutInterval: Double.infinity)
    request.addValue("tokenHere", forHTTPHeaderField: "Authorization")
    
    do{
      let i = try JSONSerialization.data(withJSONObject: param, options: .prettyPrinted)
    //            print("\(type(of: i))")
        print(String(data: i,
                     encoding: .ascii) ?? "nil")
        request.httpMethod = "POST"
        request.httpBody = i
        
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
          guard let data = data else {
            print(String(describing: error))
            semaphore.signal()
            return
          }
        
        
        semaphore.signal()
        do{
            let postData = try JSONDecoder().decode(ModelRootClassHere.self, from: data)
            print(postData)
            MyData = postData
            completion()
            
        }
        catch{
            print(error)
            print("error............")
        }
        }
        task.resume()
        semaphore.wait()
    }catch{
        print(error)
    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71334858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档