【发布时间】:2016-04-20 10:21:56
【问题描述】:
我正在使用 AlamofireObjectMapper 与后端服务器进行通信。其中一个请求的结果是一个项目数组,其中包含两个值:
- “typeIdentifier”指示第二个值(“arbitraryData”)属于哪种类型的数据
- “任意数据”:
- 如果“typeIdentifier”包含“X”,则arbitraryData的类型为ArbitraryDataTypeX
- 如果“typeIdentifier”包含“Y”,则arbitraryData的类型为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(实际上它有点复杂,但我们忽略它)由后端提供,无法更改。
【问题讨论】:
-
您要回答的问题是什么?
-
对不起,这确实不清楚。我编辑了问题。
标签: json swift subclass alamofire objectmapper