我正在使用AlamofireObjectMapper与后端服务器进行通信。其中一个请求的结果是一个项目数组,其中包含两个值:
两个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(事实上它有点复杂,但让我们把它留下来)由后端给出,不能改变。
答案 0 :(得分:0)
好的,我找到了一个解决方案(我不知道为什么我从一开始就没有看到它):
// This is Item.map()
func mapping(map: Map) {
typeIdentifier <- map["typeIdentifier"]
switch typeIdentifier {
case "X":
let x: X?
x <- map["arbitraryData"]
arbitraryData = x
case "Y":
let y: Y?
y <- map["arbitraryData"]
arbitraryData = y
default:
arbitraryData = nil
}
}