Response
在 Moya 中,Response
类是用于表示网络请求返回的数据,它封装了请求的结果,包括 HTTP 状态码、响应头、响应体等信息。通过 Response
对象,开发者可以轻松处理请求的结果,解析响应内容,处理错误等。
Response
的主要作用
Response
的主要作用Moya 的 Response
类主要是处理和管理网络请求的响应数据。它提供了访问 HTTP 请求结果的接口,并简化了对返回数据的处理,例如:将响应体解析成 JSON 或模型对象,提取状态码和头信息等。
Response
的核心属性
Response
的核心属性Response
包含了所有请求返回的关键信息,这些信息在处理 API 响应时非常有用:
statusCode
:HTTP 响应状态码,例如
200
表示请求成功,404
表示找不到资源等。你可以根据状态码决定如何处理响应。示例:
let statusCode = response.statusCode if statusCode == 200 { print("Request succeeded!") }
data
:响应体的二进制数据。这是服务器返回的实际数据,通常需要将其解析为 JSON 或其他格式来使用。
示例:
let responseData = response.data
response
:原始的
HTTPURLResponse
对象,包含了所有与响应相关的底层信息,比如响应头、HTTP 版本等。示例:
let headers = response.response?.allHeaderFields
Response
的方法
Response
的方法Response
提供了一些便捷的方法来帮助开发者处理和解析响应数据:
mapJSON()
:将响应体数据转换为 JSON 格式,适用于返回 JSON 的 API 响应。
示例:
do { let json = try response.mapJSON() print(json) } catch { print("Failed to parse JSON") }
mapString()
:将响应体数据转换为字符串格式,适用于返回文本或 HTML 内容的响应。
示例:
do { let stringResponse = try response.mapString() print(stringResponse) } catch { print("Failed to parse string") }
map<T: Decodable>(_ type: T.Type)
:使用
Codable
将响应体数据解析为指定的模型对象,适合直接将 JSON 转换为 Swift 结构体或类。示例:
struct User: Decodable { let id: Int let name: String } do { let user = try response.map(User.self) print(user.name) } catch { print("Failed to map response to User") }
filter(statusCode: Int)
:通过状态码过滤响应,如果状态码不匹配,则抛出错误。常用于确保请求成功。
示例:
do { let filteredResponse = try response.filter(statusCode: 200) // 请求成功,继续处理响应数据 } catch { print("Request failed with status code: \(response.statusCode)") }
filterSuccessfulStatusCodes()
:自动过滤成功的状态码(200 到 299)。如果状态码不在这个范围内,会抛出错误。
示例:
do { let successResponse = try response.filterSuccessfulStatusCodes() // 请求成功 } catch { print("Request failed") }
典型的响应处理流程
当 Moya 请求返回一个 Response
对象后,通常你会对它进行解析,处理成功和失败的响应。
provider.request(.getUser(id: 123)) { result in
switch result {
case let .success(response):
do {
// 确保状态码为 200-299
let filteredResponse = try response.filterSuccessfulStatusCodes()
// 将响应体解析为 JSON
let json = try filteredResponse.mapJSON()
print("Parsed JSON: \(json)")
// 或者直接映射为模型对象
let user = try filteredResponse.map(User.self)
print("User name: \(user.name)")
} catch {
print("Error parsing response: \(error)")
}
case let .failure(error):
// 处理请求失败
print("Request failed: \(error)")
}
}
小结
Moya 的 Response
类简化了处理网络请求响应的过程,提供了对 HTTP 状态码、响应数据、响应头等的便捷访问方式。通过提供丰富的解析方法,如 mapJSON()
、mapString()
和 map
,开发者可以轻松将服务器返回的数据转换为可用的格式或模型,极大地提高了开发效率。
Last updated