13 URLSession 使用指南

在上一篇教程中,我们介绍了 UIKit 框架中常用的 UI 组件,为开发者提供了创建优秀用户界面的基础知识。本篇教程将深入探讨 URLSession,这是一种处理网络请求的强大工具,它帮助我们与网络进行交互,获取数据并实现应用的联网功能。接下来,我们将通过案例来具体说明如何使用 URLSession 发起网络请求。

什么是 URLSession?

URLSessionFoundation 框架中的一个类,旨在提供 API 以便轻松地发送和接收 HTTP 请求。它负责管理所有与 URL 相关的请求,包括下载、上传以及缓存等功能。

使用 URLSession 发送 GET 请求

让我们首先从一个简单的 GET 请求开始。假设我们想要请求一个公共 API,例如获取用户的信息。

示例代码

下面的代码展示了如何使用 URLSession 发送 GET 请求并处理响应:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import Foundation

// 定义一个函数以发起网络请求
func fetchUserData() {
// 创建 URL
guard let url = URL(string: "https://jsonplaceholder.typicode.com/users/1") else {
print("无效的 URL")
return
}

// 创建 URLSession 实例
let session = URLSession.shared

// 创建数据任务
let task = session.dataTask(with: url) { data, response, error in
// 处理错误
if let error = error {
print("请求错误: \(error.localizedDescription)")
return
}

// 确保有数据返回
guard let data = data else {
print("没有返回数据")
return
}

// 打印返回的数据
if let dataString = String(data: data, encoding: .utf8) {
print("返回的数据: \(dataString)")
}
}

// 启动任务
task.resume()
}

// 调用函数进行网络请求
fetchUserData()

代码解析

  1. 创建 URL: 首先,我们需要一个有效的 URL。此示例中,我们请求的是 JSONPlaceholder 的用户数据 API。

  2. 创建 URLSession 实例: 使用 URLSession.shared 创建一个共享的 URLSession 实例。

  3. 创建数据任务: 使用 dataTask(with:completionHandler:) 方法创建一个数据任务。该任务会异步请求指定的 URL。

  4. 处理响应: 在完成处理程序中,我们检查是否有错误并确保我们收到了数据。随后,我们将数据转换为字符串并打印出来。

  5. 启动任务: 记得调用 task.resume() 来启动网络请求。

发送 POST 请求

除了 GET 请求,URLSession 还可以发送 POST 请求,我们来看看如何实现这个功能。

示例代码

下面的代码展示了如何使用 URLSession 发送 POST 请求,向服务器提交数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import Foundation

func postData() {
// 创建 URL
guard let url = URL(string: "https://jsonplaceholder.typicode.com/posts") else {
print("无效的 URL")
return
}

// 创建请求
var request = URLRequest(url: url)
request.httpMethod = "POST" // 指定请求方法为 POST
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

// 准备要发送的数据
let parameters: [String: Any] = [
"title": "foo",
"body": "bar",
"userId": 1
]

// 将参数编码为 JSON 数据
guard let jsonData = try? JSONSerialization.data(withJSONObject: parameters) else {
print("参数编码错误")
return
}

// 将 JSON 数据加载到请求体中
request.httpBody = jsonData

// 创建 URLSession 实例
let session = URLSession.shared

// 创建数据任务
let task = session.dataTask(with: request) { data, response, error in
// 处理错误
if let error = error {
print("请求错误: \(error.localizedDescription)")
return
}

// 确保有数据返回
guard let data = data else {
print("没有返回数据")
return
}

// 打印返回的数据
if let dataString = String(data: data, encoding: .utf8) {
print("返回的数据: \(dataString)")
}
}

// 启动任务
task.resume()
}

// 调用函数进行 POST 请求
postData()

代码解析

  1. 创建请求: 使用 URLRequest 创建一个请求对象,并设置请求的 HTTP 方法为 POST

  2. 设置请求头: 指定 Content-Typeapplication/json,这表明我们将发送 JSON 格式的数据。

  3. 准备数据: 创建一个字典来存储我们要发送的参数,然后使用 JSONSerialization 将其转换为 JSON 数据。

  4. 发送请求: 创建数据任务并在完成处理程序中处理响应,和 GET 请求相似。

总结

在本篇教程中,我们详细介绍了如何使用 URLSession 发起 GET 和 POST 类型的网络请求。通过这些基础知识,你应该能够在你的 iOS 应用中轻松地与 RESTful API 进行交互。在下一篇教程中,我们将深入探讨如何解析 JSON 数据,以便从 API 中提取有用的信息,继续我们的学习之旅。

13 URLSession 使用指南

https://zglg.work/ios-app-dev/13/

作者

IT教程网(郭震)

发布于

2024-08-14

更新于

2024-08-15

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论