ios - 从根节点映射嵌套对象不起作用

标签 ios json swift objectmapper

使用 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

如有任何帮助,我们将不胜感激。

最佳答案

profession其模型未直接包含在 user 中json 模型你不应该使用对象映射器 <-运营商在这种情况下。相反,您应该初始化新的 Profession直接来自 user 的对象映射函数

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"]
    }
}

关于ios - 从根节点映射嵌套对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44646620/

相关文章:

ios - 使用 Objective C 进行 DES 加密

ios - 在运行时或通过测试用例完成的静态数据验证

ios - AFNetworking 错误域代码=-999?但是工作正常吗?

javascript - 从数据库加载标记作为可切换层

swift - 在 Swift 3 中以编程方式创建没有 XIB 的 NSViewController

ios - 为什么显示 Google 插页式广告会改变我的导航栏的高度? Xcode 11.3、iOS 13

ios - 使用 ObjectiveC++ 编译器的问题

ios - 链接器错误 undefined symbol

c++ - 如何在json文件中搜索对象的值?

objective-c - Swift 模块不使用 L10N 中的本地化内容