如何制作一个具有多种可能枚举类型的可编码类



假设我有一个对象,它可以有几种枚举中的一种。如何使其符合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
}

您需要使Status类型成为泛型,以便编译器知道您将传递一个符合协议Status的具体类型,以便它是可解码的&可编码。

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

现在,您可以将ProdEventMyCollection对象设置为任何类型的Status,如下所示,

var aEvent: ProdEvent<StatusA>!
var bEvent: ProdEvent<StatusB>!
var aCollection: MyCollection<StatusA>!
var bCollection: MyCollection<StatusB>!

您也可以检查这个线程,了解为什么不能将协议用作具体类型。

相关内容

  • 没有找到相关文章

最新更新