需要访问lat
和lng
。我怎么能这样做?
这就是我现在所做的,它不起作用:
latitude <- map["location"]["lat"]
longitude <- map["location"]["lng"]
答案 0 :(得分:2)
您需要为该位置声明一个分隔的类,以包含lat
和lng
属性:
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)
}
}
}