这不是关于解码具有多种类型(int、string)的属性值。
我有一个名为data
它可以返回多种类型,此时可以执行的操作可能如下所示:
enum MyData: Codable {
case ObjOne(groupObject)
case ObjTwo(imageObject)
init(from decoder: Decoder) throws {
let value = try decoder.singleValueContainer()
if let v = try? value.decode(groupObject.self) {
self = .ObjOne(v)
return
} else if let v = try? value.decode(imageObject.self) {
self = .ObjTwo(v)
return
}
throw Rating.ParseError.notRecognizedType(value)
}
enum ParseError: Error {
case notRecognizedType(Any)
}
}
这里的问题是我试图让MyData
根据先前解码过程中使用的另一个值来解码对象,简而言之,我想将一个值传递给MyData
这样它就可以确定要解码哪个
我有这个
enum ContentType: String, Codable {
case linear
case grid
case slider
}
而且我要MyData
知道这个ContentType
如此看重MyData
可以确定流量将如何流动,
那么 ContentType 从哪里来呢?它与前一个主对象的属性列表相同,来自如下所示的内容
struct Catalog: Codable {
var dataType: ContentType?
var data: MyData?
}
我想用更简单的话实现什么?
struct Catalog: Codable {
var dataType: ContentType?
var data: MyData<dataType>? <--// i know this is not possible,
// -- but i want MyData to know about the dataType value that will be decoded
}
--------- 我要解析的 JSON
[{
"data_type": "group",
"data": {
"group_id": 127 // this refers to object : groupObject
}
},
{
"data_type": "image",
"data": {
"image": "http://google.com/favicon" // this is referring : imageObject
}
}
]
你看上面的一点,就是“数据”可以返回不同的对象,基于 data_type 的值