美文网首页
如何在Swift中使用URLSession发出HTTP请求

如何在Swift中使用URLSession发出HTTP请求

作者: 开心人开发世界 | 来源:发表于2019-11-01 06:46 被阅读0次

无需使用第三方库即可发出HTTP请求的更快方法

介绍

如今,应用程序不断从网络上下载数据。当您使用应用程序进行搜索时,将调用一个端点。将结果数据下载,放入对象中,然后在几毫秒内显示给您。

为了发出HTTP网络请求,开发人员通常倾向于添加第三方项目,例如Alamofire。但是通常,该库具有比所需更多的功能,并且会占用大量无用的空间。

在本文中,我们将讨论如何URLSession用于发出HTTP请求并将JSON结果序列化为对象。


入门

首先,打开Xcode然后创建一个新项目。选择单视图应用程序。

现在,在屏幕中央创建一个按钮,点击该按钮将调用我们的API方法。


实作

首先,我们需要发出HTTP请求。对于此示例,我将使用来自jsonplaceholder的终结点,这是一个伪造的在线REST API,用于每月进行超过3.5亿个请求的测试和原型制作!

该终端将返回的职位名单与userIdpostIdtitle,和body

let session = URLSession.shared 
let url = URL(string:“ https://jsonplaceholder.typicode.com/posts”)!

然后,我们将创建一个dataTask调用URLSession.dataTask方法。这将创建一个任务,从URL集中检索内容,并在请求完成后调用处理程序:

let task = session.dataTask(with:url,    completeHandler :{data,response,error in 
    //检查响应             
            print(error)              
            print(response)                                               
    })
task.resume()

注意:不要忘记task.resume()在最后调用,否则请求将不会执行。

如果现在运行代码,您将在控制台中看到HTTP响应,如下所示:

您可能会问我们的数据在哪里,对不对?简单地说:在方法data返回的参数中dataTask。如果我们尝试打印它,我们将看到以字符串形式返回的JSON-但我们需要在自定义对象中使用它。我们该怎么做?

我们可以手动创建我们的类userIdidtitle,和body作为属性或使用做一个更快的方式quicktype.io

import Foundation

class Post: Codable {
    let userID, id: Int
    let title, body: String

    enum CodingKeys: String, CodingKey {
        case userID = "userId"
        case id, title, body
    }

    init(userID: Int, id: Int, title: String, body: String) {
        self.userID = userID
        self.id = id
        self.title = title
        self.body = body
    }
}

然后回到您的ViewController文件,并将之前的代码更改为以下代码:

let session = URLSession.shared
        let url = URL(string: "https://jsonplaceholder.typicode.com/posts")!
        let task = session.dataTask(with: url, completionHandler: { data, response, error in
            // Check the response
            print(response)
            
            // Check if an error occured
            if error != nil {
                // HERE you can manage the error
                print(error)
                return
            }
            
            // Serialize the data into an object
            do {                
                let json = try JSONDecoder().decode([Post].self, from: data! )
                    //try JSONSerialization.jsonObject(with: data!, options: [])
                print(json)
            } catch {
                print("Error during JSON serialization: \(error.localizedDescription)")
            }
            
        })
        task.resume()

测试时间

我们终于准备好启动我们的应用程序,并尝试进行API调用。

由于我们的应用程序还没有真正的界面,因此我将在断点处将JSON解码为对象。

如果将我们的对象添加到变量视图,我们将看到它正确包含了从端点获取的所有数据。

翻译自:https://medium.com/better-programming/how-to-make-http-requests-with-urlsession-in-swift-4dced0287d40

相关文章

网友评论

      本文标题:如何在Swift中使用URLSession发出HTTP请求

      本文链接:https://www.haomeiwen.com/subject/ycbtbctx.html