是否可以在 JsonDecoder 中传递多种数据类型?
Is it possible to pass multiple data types inside a JsonDecoder?
这是我打算做的。
我有两个结构,StructA
和 StructB
。
我还有一个需要接受 StructA
或 StructB
的 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)
}
这是我打算做的。
我有两个结构,StructA
和 StructB
。
我还有一个需要接受 StructA
或 StructB
的 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)
}