【问题标题】:Mapping nested objects from root node is not working从根节点映射嵌套对象不起作用
【发布时间】:2017-06-20 07:32:13
【问题描述】:

使用 ObjectMapper(https://github.com/Hearst-DD/ObjectMapper),我正在将 JSON 转换为 Swift 对象。访问user.profession 时应用程序崩溃。

基本上,我不知道如何使用相同的 JSON 映射根节点解析模型内的另一个可映射对象,我认为我做错了。我在任何地方都找不到相同的文档。

JSON 字典:

user: {
  "name": "Dinesh",
  "url": "https://dinaraja.me",
  "company": "IIINC",
  "designation": "Developer"
}

型号:

struct User: Mappable {
  var name: String!
  var url: URL!
  var profession: Profession!
  init(_ map: Map) {
    name <- map["name"]
    url <- map["url"]
    profession <- map   // FIXME: It's not working. Find out what we do here is right/wrong
  }
}
struct Profession: Mappable {
  var company: String!
  var designation: String!
  init(_ map: Map) {
    company <- map["company"]
    designation <- map["designation"]
  }
}

我做了什么:

let user = Mapper<User>().map(myJSONDictionary)
print(user.profession.company) //FIXME: Crashes here

任何帮助将不胜感激。

【问题讨论】:

    标签: ios json swift objectmapper


    【解决方案1】:

    由于profession 模型不直接包含在user json 模型中,因此在这种情况下不应使用对象映射器&lt;- 运算符。相反,您应该直接从user 映射函数初始化新的Profession 对象

    struct User: Mappable {
        var name: String!
        var url: URL!
        var profession: Profession!
    
        init(map: Map) {
    
        }
    
        mutating func mapping(map: Map) {
    
            name <- map["name"]
            url <- map["url"]
            profession = Profession(map: map)
        }
    }
    
    struct Profession: Mappable {
        var company: String!
        var designation: String!
    
        init(map: Map) {
            company <- map["company"]
            designation <- map["designation"]
        }
    
        mutating func mapping(map: Map) {
            company <- map["company"]
            designation <- map["designation"]
        }
    }
    

    【讨论】:

    • 我试过了。但是,它调用init(map: Map) 而根本不调用func mapping(map:)。我现在实际上正在明确映射。 :(profession = Mapper&lt;Profession&gt;(context: map.context, shouldIncludeNilValues: false).map(JSON: map.JSON)
    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 2013-08-01
    • 2014-09-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 2018-03-17
    相关资源
    最近更新 更多