Swift 如何使用多个可能的枚举类型创建可编码类?

Swift 如何使用多个可能的枚举类型创建可编码类?,swift,enums,codable,Swift,Enums,Codable,假设我有一个对象,它可以有几种枚举中的一种。如何使其符合Codable protocol Status : Codable {} enum StatusA : String, Status { case a = "a" case b = "b" } enum StatusB : String, Status { case x = "x" case y = "y" } class ProdEvent : Codable { let status : Stat

假设我有一个对象,它可以有几种枚举中的一种。如何使其符合Codable

protocol Status : Codable {}
enum StatusA : String, Status {
    case a = "a"
    case b = "b"
}
enum StatusB : String, Status {
    case x = "x"
    case y = "y"
}
class ProdEvent : Codable {
    let status : Status // doesn't conform to codable
}
class MyCollection : Codable {
    let arr_events : [ProdEvent] // will be unhappy if you try to use generics or associatedType
}
您需要将状态类型设置为泛型,以便编译器知道您将传递符合协议状态的具体类型,从而使其可解码和可编码

class ProdEvent<T: Status> : Codable {
    let status : T
}

class MyCollection<T: Status> : Codable {
    let arr_events : [ProdEvent<T>]
}
您还可以检查为什么不能将协议用作具体类型。

您需要将状态类型设置为泛型,以便编译器知道您将传递符合协议状态的具体类型,从而使其可解码和可编码

class ProdEvent<T: Status> : Codable {
    let status : T
}

class MyCollection<T: Status> : Codable {
    let arr_events : [ProdEvent<T>]
}

您还可以检查为什么不能将协议用作具体类型。

这回答了这个问题,但我遗漏了一个应该包含的细节:我希望集合包含具有不同状态类型的ProdEvent对象。但是,我认为这种模式不可能实现。这回答了问题,但我遗漏了一个应该包含的细节:我希望集合包含具有不同状态类型的ProdEvent对象。然而,我认为这种模式是不可能的。