我有一个用于解码来自服务器的JSON的结构:
struct AdminResponse: Codable {
let Status: Int?
let SuperUsers: [SuperUser]?
let Message: String?
}
struct SuperUser: Codable {
let name:String?
let id:String?
}
这非常有效。我能够解码JSON。
但我不喜欢这些第一个大写的属性,然后我做
struct AdminResponse: Codable {
let Status: Int?
let SuperUsers: [SuperUser]?
let Message: String?
enum CodingKeys: String, CodingKey {
case status = "Status"
case superUsers = "SuperUsers"
case message = "Message"
}
}
struct SuperUser: Codable {
let name:String?
let id:String?
enum CodingKeys: String, CodingKey {
case name = "name"
case id = "id"
}
}
错误:类型AdminResponse不符合可解码协议。
为什么???
来自文档编码和解码自定义类型:
可编码类型可以声明一个名为符合CodingKey协议的CodingKey。当枚举存在,其案例是当可编码类型的实例为编码或解码枚举事例的名称应该匹配为类型中的相应属性指定的名称
换句话说:
struct CodableStruct: Codable {
let myPropertyName: SomeCodableType
enum CodingKeys: String, CodingKey {
case myPropertyName = "WhateverIsMatchingInRealityTheJSON"
}
}
并且myPropertyName
必须是CodableStruct
的var的名称和CodingKeys
的case
的名称。
在您的情况下,由于建议以小写字母开头命名var,因此我将采用这种方式:
struct AdminResponse: Codable {
let status: Int?
let superUsers: [SuperUser]?
let message: String?
enum CodingKeys: String, CodingKey {
case status = "Status"
case superUsers = "SuperUsers"
case message = "Message"
}
}