gpt4 book ai didi

swift - 解析 Codable 类并避免重复

转载 作者:可可西里 更新时间:2023-11-01 00:54:19 26 4
gpt4 key购买 nike

我有一个 JSON 响应如下:

{
"http_status": 200,
"success": true,
"has_error": false,
"error": [
""
],
"response": {
"token": "",
"verified": false,
"message": ""
}
}

据我所知,对于应用程序 API 使用,http_status、success、has_error、error 在所有 APIS 之间共享,因此我将创建一个 Codable 类来处理它,但响应可能是不同的模型,所以这里是我正在尝试做。

我已经创建了一个如下所示的通用响应类,所以我可以将这个类用于项目中的所有 api,以避免重复相同的类但名称不同:

class GeneralResponse:Codable {

let http_status: Int?
let success, has_error: Bool?
let error: [String]?

enum CodingKeys: String, CodingKey {
case http_status = "http_status"
case success = "success"
case has_error = "has_error"
case error = "error"
}

init(http_status: Int?, success: Bool?, has_error: Bool?,error: [String]?) {
self.http_status = http_status
self.success = success
self.has_error = has_error
self.error = error
}

}

现在我已经创建了用于处理注册响应的响应类:

class RegistrationResponseDetails: Codable {
let token: String?
let verified: Bool?
let message: String?

init(token: String?, verified: Bool?, message: String?) {
self.token = token
self.verified = verified
self.message = message
}
}

假设我需要解析注册响应,这就是我所做的,我创建了一个类并使用了它们:

class RegistrationResponse: Codable {

let generalResponse:GeneralResponse?
let response: RegistrationResponseDetails?

init(generalResponse: GeneralResponse?, response: RegistrationResponseDetails?) {
self.generalResponse = generalResponse
self.response = response
}
}

所以我将主要使用RegistrationResponse来解析response,response将解析“generalResponse”,其中包括http_status,success,has_error,error,然后response将解析所需的响应对象。

但是在某些时候 generalResponse 对象总是 nil 并且 response 已经正确解析了数据,我应该怎么做才能让 generalResponse 在每个 api 中得到解析而不重复,因为在每个 api 中我都会有 generalResponse 对象所以有可能解决是吗?

注意:我使用 Alamofire 作为网络库。

最佳答案

您可以使您的 GeneralResponse 通用并告诉它在解析响应时使用什么类型:

class GeneralResponse<T: Codable>: Codable {
let http_status: Int?
let success, has_error: Bool?
let error: [String]?
let response: T?
}

class RegistrationResponseDetails: Codable {
let token: String?
let verified: Bool?
let message: String?
}

然后你可以在解析json时给它内部响应类:

let generalResponse = try JSONDecoder().decode(GeneralResponse<RegistrationResponseDetails>.self, from: jsonData)
// generalResponse.response is of type RegistrationResponseDetails?

关于swift - 解析 Codable 类并避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53875382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com