如何使用ObjectMapper从字典访问嵌套键?

时间:2018-03-29 12:34:46

标签: ios swift objectmapper

enter image description here

需要访问latlng。我怎么能这样做?

这就是我现在所做的,它不起作用:

latitude <- map["location"]["lat"]
longitude <- map["location"]["lng"]

4 个答案:

答案 0 :(得分:2)

您需要为该位置声明一个分隔的类,以包含latlng属性:

class Location: Mappable {
    var lat: Double?
    var lng: Double?

    required init?(map: Map){ }

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

因此您可以将其用作:

class Base: Mappable {
    var location: Location?
    // ...

    required init?(map: Map){ }

    func mapping(map: Map) {
        location <- map["location"]
        //...
    }
}

它将表示用于映射基础对象的嵌套类型。

除了条形码:您可能还想查看Codable - Encoding and Decoding Custom Types

答案 1 :(得分:2)

你只需要:

latitude <- map["location.lat"]
longitude <- map["location.lng"]

到目前为止ObjectMapper支持键中的点表示法,以便轻松映射嵌套对象(您可以在库文档中的“嵌套对象的简单映射”下找到它。)

答案 2 :(得分:1)

您可以使用JSONDecoder而不是使用ObjectMapper,这样您就可以只编写json中对象的键,而不是使用ObjectMapper将它们写两次。 (作为属性和内部映射函数),特别是如果服务器键命名适合您

答案 3 :(得分:-3)

希望这有助于你

 let data = NSData(contentsOf: searchUrl as URL)
                let json = try! JSONSerialization.jsonObject(with: data! as Data, options: JSONSerialization.ReadingOptions.allowFragments) as! [String:AnyObject]
                let status = json["status"] as! String
                print(status)
                if status == "OK" {
                    if let result = json["results"] as? [[String:AnyObject]] {
                        if let geometry = result[0]["geometry"] as? [String:AnyObject] {
                            if let location = geometry["location"] as? [String:AnyObject] {
                                lat = location["lat"] as! Double
                                lng = location["lng"] as! Double
                                print(lat)
                                print(lng)
                            }
                      }
                 }