是否可以在 JsonDecoder 中传递多种数据类型?

Is it possible to pass multiple data types inside a JsonDecoder?

这是我打算做的。

我有两个结构,StructAStructB

我还有一个需要接受 StructAStructB 的 JsonDecoder。

我已经尝试定义一个通用协议并使两个结构都符合该协议,并尝试使用一些关键字,如:

struct StructA: CommonStruct {
   let someBool = false
}

struct StructB: CommonStruct {
   let someString = "SomeString"
}

protocol CommonStruct {
}

func needToGetShitDone(
   data: CommonStruct  // <- What type should ``data`` be? 
) {
   let data = try JsonDecoder().decode(CommonStruct.type, from: data)
}

...但是当然,那是行不通的。

是否可以配置 JsonDecoder 以接受 StructA 和 StructB。

使协议符合Decodable并使用通用函数

protocol CommonStruct: Decodable {}


func decode<T: CommonStruct>(from data: Data) throws -> T {
    try JSONDecoder().decode(T.self, from: data)
}

或者,如果您的协议没有其他用途,那么您可以跳过它并执行

func decode<T: Decodable>(from data: Data) throws -> T {
    try JSONDecoder().decode(T.self, from: data)
}