推荐答案
// www.javascriptcn.com code example
import Foundation
// 创建 URL 对象
guard let url = URL(string: "https://example.com/api/data") else {
print("Invalid URL")
return
}
// 创建 URLSession 对象
let session = URLSession.shared
// 创建 URLSessionDataTask 对象
let task = session.dataTask(with: url) { data, response, error in
// 检查是否有错误
if let error = error {
print("Error: \(error.localizedDescription)")
return
}
// 检查响应状态码
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
print("Invalid response")
return
}
// 处理返回的数据
if let data = data {
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print("Response JSON: \(json)")
} catch {
print("JSON parsing error: \(error.localizedDescription)")
}
}
}
// 启动任务
task.resume()本题详细解读
1. 创建 URL 对象
首先,我们需要创建一个 URL 对象来表示我们要请求的资源。URL 对象可以通过字符串初始化,但需要确保字符串是有效的 URL 格式。
guard let url = URL(string: "https://example.com/api/data") else {
print("Invalid URL")
return
}2. 创建 URLSession 对象
URLSession 是用于管理网络请求的核心类。我们可以使用 URLSession.shared 来获取一个共享的单例对象,这个对象已经配置好了基本的网络请求设置。
let session = URLSession.shared
3. 创建 URLSessionDataTask 对象
URLSessionDataTask 是 URLSession 的一个子类,用于执行 HTTP/HTTPS 请求并获取数据。我们可以通过 dataTask(with:completionHandler:) 方法来创建一个 URLSessionDataTask 对象,并在闭包中处理请求的结果。
let task = session.dataTask(with: url) { data, response, error in
// 处理请求结果
}4. 处理请求结果
在闭包中,我们需要处理三种可能的情况:
- 错误处理:如果请求过程中发生了错误,
error参数会包含错误信息。 - 响应状态码检查:我们需要检查
response是否为HTTPURLResponse类型,并确保状态码在 200 到 299 之间,表示请求成功。 - 数据处理:如果请求成功,
data参数会包含服务器返回的数据。我们可以使用JSONSerialization来解析 JSON 数据。
// www.javascriptcn.com code example
if let error = error {
print("Error: \(error.localizedDescription)")
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
print("Invalid response")
return
}
if let data = data {
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print("Response JSON: \(json)")
} catch {
print("JSON parsing error: \(error.localizedDescription)")
}
}5. 启动任务
最后,我们需要调用 resume() 方法来启动任务。URLSessionDataTask 在创建后默认是暂停状态,必须调用 resume() 才能开始执行请求。
task.resume()