如何在模型中使用swift协议



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
}

最新更新