JSON:
"sittingFurniture":[
{
"sittingObjectType": "chair",
"fabric": "textile"
},
{
"sittingObjectType":"bed",
"height": 70
},
...
]
Swift代码:
protocol SittingObject {
var type: SittingObjectType
}
public enum SittingObjectType: Codable, Equatable {
case chair
case sofa
case bed
}
struct FancyChair: SittingObject, Codable, Equatable {
let fabric: String
let type: SittingObjectType = .chair
}
struct FancyBed: SittingObject, Codable, Equatable{
let height: Int
let type: SittingObjectType = .bed
}
struct FurnitureList: Codable, Equatable {
let sittingFurniture: [SittingObject] //ERROR
}
协议"SittingObject"只能用作通用约束,因为它具有自身或相关类型要求
如何最好地反序列化这样的JSON?
这样设置结构可能会更好,而不是两个单独的对象。
然后您可以在FurnitureList
上使用JSONDecoder
struct FancyFurnitureObject: SittingObject, Codable, Equatable {
let fabric: String?
let height: Int?
let type: SittingObjectType
}
public enum SittingObjectType: Codable, Equatable {
case chair
case sofa
case bed
}
struct FurnitureList: Codable, Equatable {
let sittingFurniture: [FancyFurnitureObject] //ERROR
}