ObjectMapper如何使用Index作为CustomObject属性

时间:2017-06-27 17:47:29

标签: ios json swift objectmapper

本周我开始使用ObjectMapper,我正在尝试将JSON映射到2个CustomClasses,但我不知道ObjectMapper是否有一些函数可以执行我想要的操作。第一个CustomClass有一个类型为[String:CustomClass2]的属性,其中此Dictionary的索引应该是第二个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"]
}

1 个答案:

答案 0 :(得分:1)

在您的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"]
    }
}