我正在使用 AlamofireObjectMapper 与后端服务器通信。其中一个请求的结果是一个项目数组,其中包含两个值:
- 指示第二个值(“arbitraryData”)属于哪种类型的数据的“typeIdentifier”
- 一个“任意数据”:
- 如果“typeIdentifier”包含“X”,则任意数据的类型为 ArbitraryDataTypeX
- 如果“typeIdentifier”包含“Y”,则任意数据的类型为 ArbitraryDataTypeY
这两个 ArbitraryDataType 类不共享任何共同的祖先(Mappable 除外)。它甚至可以是原始类型、数组、可选等。
如何让 AlamofireObjectMapper 使用适当的类型解析“arbitraryData”字段。
请参阅以下 JSON 文件:
{
"arrayOfItems": [
{
"typeIdentifier": "X",
"arbitraryData":
{
"value": "BLA",
}
},
{
"typeIdentifier": "Y",
"arbitraryData":
{
"anotherValue": "BLUBB",
}
}
]
}
我对应的 Swing 文件如下所示:
class Item : Mapping {
var typeIdentifier = "X"
var arbitraryData: Mappable? = nil
init?(_ map: Map) {
self.init()
mapping(map)
}
func mapping(map: Map) {
typeIdentifier <- map["typeIdentifier"]
// THIS LINE CONTAINS MY QUESTION: HOW CAN I TELL OBJECTMAPPER, THAT,
// IF typeIdentifier CONTAINS "X", arbitraryData IS OF TYPE
// ArbitraryDataTypeX, AND IF "Y" arbitraryData IS OF TYPE
// ArbitraryDataTypeY?
arbitraryData <- map["arbitraryData"]
}
}
class ArbitraryDataTypeX : Mapping {
var value = "BLA"
init?(_ map: Map) {
self.init()
mapping(map)
}
func mapping(map: Map) {
value <- map["value"]
}
}
class ArbitraryDataTypeY : Mapping {
var anotherValue = "BLUBB"
init?(_ map: Map) {
self.init()
mapping(map)
}
func mapping(map: Map) {
anotherValue <- map["anotherValue"]
}
}
背景信息:我正在使用 AlamofireObjectMapper 与后端服务器进行通信。其中一个请求的结果是一个 Item 数组。typeIdentifier-mechanism(实际上它有点复杂,但让我们忽略它)由后端提供并且无法更改。