ObjectMapper 如何将 [String:CustomObject] 的字典映射为 CustomObject 属性

ObjectMapper how map Dictionary of [String:CustomObject] With Index as CustomObject Property

我这周开始使用 ObjectMapper,我正在尝试将一个 JSON 映射到 2 个 Custom类,但我不知道 ObjectMapper 是否具有某些功能来执行我想要的操作。第一个 CustomClass 有一个 属性 类型:[String:CustomClass2] 其中这个字典的索引应该是 属性 第二个 CustomObject 的 ID。

JSON 使用:

{ 
  "types": [
   { 
    "id": "mk8QPMSo2xvtSoP0cBUD",
    "name": "type 1",
    "img": "type_1",
    "showCategories": false,
    "modalityHint": [
      "K7VqeFkRQNXoh2OBxgIf"
    ],
    "categories": [
      "mP3MqbJrO5Da1dVAPRvk",
      "SlNezp2m3PECnTyqQMUV"
    ]
   }
  ]
}

类 使用:

class MyClass: Mappable {
    var types:[String:MyClass2] = [String:MyClass2]() //Index should be ID property of MyClass2 Object
    required init?(map:Map) {
        guard map.JSON["types"] != nil else {
            return nil
        }
    }
    func mapping(map: Map) {
        types <- map["types"]
    }
}
class MyClass2: Mappable {
    private var id: String!
    private var name: String!
    private var img: String!
    private var showCategories: Bool!
    private var modalityHint: [String]?
    private var categories: [String]?
    required init?(map: Map) { }
    func mapping(map: Map) {
        id <- map["id"]
        name <- map["name"]
        img <- map["img"]
        showCategories <- map["showCategories"]
        modalityHint <- map["modalityHint"]
        categories <- map["categories"]
}

在您的 JSON 中,types 键是 array 而不是 Dictionary

变化:

var types:[String:MyClass2] = [String:MyClass2]()

收件人:

var types:[Class2] = []

像这样:

class MyClass: Mappable {
    private var arrayTypes = [MyClass2] {
        didSet{
            var mapTypes = [String:MyClass2]?
            for obj in arrayTypes {
                mapTypes[obj.id] = obj
            }

            types = mapTypes
        }
    }

    var types:[String:MyClass2] = [String:MyClass2]()
    required init?(map:Map) {
        guard map.JSON["types"] != nil else {
            return nil
        }
    }
    func mapping(map: Map) {
        arrayTypes <- map["types"]
    }
}