ObjectMapper如何在嵌套实体中映射值

时间:2018-04-27 10:55:28

标签: swift core-data objectmapper

在此方案中使用ObjectMapper

[{
"port": "1",
"b": [{
     "c": [{"address": 1}]
     }]
}, {
"port": "2",
"b": [{
     "c": [{"address": 2}]
     }]
}]

这里C是具有行地址和端口的实体。现在使用ObjectMapper如何设置端口实体C的值。

我已经编写了这个嵌套的代码部分

class a: NSManagedObject, Mappable {
 @NSManaged var port: NSNumber?
 @NSManaged var b: NSSet?
 private var barr: [b]?
 required public init?(map: Map) {
   let ctx = DbHelper .getContext()
   let entity = NSEntityDescription.entity(forEntityName: "a", in: ctx)
   super.init(entity: entity!, insertInto: ctx)
   mapping(map: map)
}

public func mapping(map: Map) {
  port <- map["port"]
  barr <- map["b"]
  if barr != nil
  {
      b = NSSet(array: barr!)
      barr = nil
  }
 }
}

同样为“B”和“C”实体创建和映射

现在在“C”我需要来自实体“a”的“port”值。

1 个答案:

答案 0 :(得分:1)

首先,你的json无效。您在端口后忘记了""port: "2",

这里的解决方案

模型结构:

class Port : Mappable {
 var port:String?
 var b: [C]?

 required init?(map: Map) {

 }

 func mapping(map: Map) {
    port <- map["port"]
    b <- map["b"]
 }
}

class C : Mappable {
 var c:[Address]?

 required init?(map: Map) {

 }

 func mapping(map: Map) {
    c <- map["c"]
 }
}

class Address : Mappable {
 var address:Int?

 required init?(map: Map) {

 }

 func mapping(map: Map) {
    address <- map["address"]
 }
}

这样称呼:

if let json = "yourJson" {
                if let res:[Port] = Mapper<Port>().mapArray(JSONArray: json as! [[String : Any]]) {
                    //your port objects
                }
            }

注意:我做了一个强制演员。你不应该。 Objectmapper需要[[String : Any]]的{​​{1}}格式。

我建议使用Alamofire进行请求。

使用Alamofire可以:

json

如果您在项目的开头,则应使用 let url = "https://api.myjson.com/bins/iw6vj" //your json Alamofire.request(url).responseJSON { (data) in if let json = data.result.value { if let res:[Port] = Mapper<Port>().mapArray(JSONArray: json as! [[String : Any]]) { //your port objects } } } https://developer.apple.com/documentation/swift/codable。网上有很多教程。搜索Alamofire + Codable,您可以非常轻松地处理请求+解析。

提示:您的命名非常混乱。查看这篇文章https://medium.com/coding-skills/clean-code-101-meaningful-names-and-functions-bf450456d90c这也有助于模型结构。