【发布时间】:2021-10-17 12:02:57
【问题描述】:
API 响应:
{
"data": {
"customer_id": "fb5056fe-d7cf-4b5e-3e32-08d9568a3822",
"source": "self",
"type": "customer",
"language": "en",
"identity_card": {
"first_name": "abdulrahman",
"middle_name": "ahmed",
"last_name": "ali",
"localized_first_name": "abdulrahman",
"localized_middle_name": "ahmed",
"localized_last_name": "ali",
"identity_card_number_last_digits": "4416",
"date_of_birth": "1994-05-15T00:00:00",
"date_of_birth_calendar_type": "gregorian"
},
"income": [],
"identity_verifications": [
null
],
"is_identity_verification_complete": false,
"is_address_complete": false,
"is_income_complete": false,
"is_usage_complete": false,
"is_employment_complete": false,
"customer_status": 3,
"customer_status_description": "inactive",
"wallet_status": 0,
"wallet_status_description": "pending"
}
}
我的模特:
struct cst_Value : Codable {
let address : cst_Addres?
let employment : cst_Employment?
let income : [cst_Income]?
let usage : cst_Usage?
let identityVerification : [cst_IdentityVerification]?
let customer_id : String?
let source : String?
let type : String?
let language : String?
let email : String?
let phone_number : String?
let identity_card : cst_IdentityCard?
let is_identity_verification_complete : Bool?
let is_address_complete : Bool?
let is_income_complete : Bool?
let is_usage_complete : Bool?
let is_employment_complete : Bool?
let status : String?
enum CodingKeys: String, CodingKey {
case customer_id = "customer_id"
case source = "source"
case type = "type"
case language = "language"
case email = "email"
case phone_number = "phone_number"
case identity_card = "identity_card"
case is_identity_verification_complete = "is_identity_verification_complete"
case is_address_complete = "is_address_complete"
case is_income_complete = "is_income_complete"
case is_usage_complete = "is_usage_complete"
case is_employment_complete = "is_employment_complete"
case status = "status"
case address = "address"
case employment = "employment"
case income = "income"
case usage = "usage"
case identityVerification = "identity_verifications"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
customer_id = try values.decodeIfPresent(String.self, forKey: .customer_id)
source = try values.decodeIfPresent(String.self, forKey: .source)
type = try values.decodeIfPresent(String.self, forKey: .type)
language = try values.decodeIfPresent(String.self, forKey: .language)
email = try values.decodeIfPresent(String.self, forKey: .email)
phone_number = try values.decodeIfPresent(String.self, forKey: .phone_number)
identity_card = try values.decodeIfPresent(cst_IdentityCard.self, forKey: .identity_card)
is_identity_verification_complete = try values.decodeIfPresent(Bool.self, forKey: .is_identity_verification_complete)
is_address_complete = try values.decodeIfPresent(Bool.self, forKey: .is_address_complete)
is_income_complete = try values.decodeIfPresent(Bool.self, forKey: .is_income_complete)
is_usage_complete = try values.decodeIfPresent(Bool.self, forKey: .is_usage_complete)
is_employment_complete = try values.decodeIfPresent(Bool.self, forKey: .is_employment_complete)
status = try values.decodeIfPresent(String.self, forKey: .status)
address = try values.decodeIfPresent(cst_Addres.self, forKey: .address)
employment = try values.decodeIfPresent(cst_Employment.self, forKey: .employment)
income = try values.decodeIfPresent([cst_Income].self, forKey: .income)
usage = try values.decodeIfPresent(cst_Usage.self, forKey: .usage)
identityVerification = try values.decodeIfPresent([cst_IdentityVerification].self, forKey: .identityVerification)
}
}
struct cst_IdentityVerification : Codable {
let identityVerificationMethod : String?
let identityVerificationStatus : String?
enum CodingKeys: String, CodingKey {
case identityVerificationMethod = "identity_verification_method"
case identityVerificationStatus = "identity_verification_status"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
identityVerificationMethod = try values.decodeIfPresent(String.self, forKey: .identityVerificationMethod)
identityVerificationStatus = try values.decodeIfPresent(String.self, forKey: .identityVerificationStatus)
}
}
错误:
▿ Optional<AFError>
▿ some : AFError
▿ responseSerializationFailed : 1 element
▿ reason : ResponseSerializationFailureReason
▿ decodingFailed : 1 element
▿ error : DecodingError
▿ valueNotFound : 2 elements
- .0 : Swift.KeyedDecodingContainer<MobilePay.cst_IdentityVerification.CodingKeys>
▿ .1 : Context
▿ codingPath : 3 elements
- 0 : CodingKeys(stringValue: "data", intValue: nil)
- 1 : CodingKeys(stringValue: "identity_verifications", intValue: nil)
▿ 2 : _JSONKey(stringValue: "Index 0", intValue: 0)
- stringValue : "Index 0"
▿ intValue : Optional<Int>
- some : 0
- debugDescription : "Cannot get keyed decoding container -- found null value instead."
- underlyingError : nil
【问题讨论】: