我目前正在使用谷歌地图自动完成功能进行ios swift应用程序。在swift 2.0中我确实喜欢这个以获得经度和纬度值:
let dic = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableLeaves) as! NSDictionary
let lat = dic["results"]?.valueForKey("geometry")?.valueForKey("location")?.valueForKey("lat")?.objectAtIndex(0) as! Double
let lon = dic["results"]?.valueForKey("geometry")?.valueForKey("location")?.valueForKey("lng")?.objectAtIndex(0) as! Double
但是对于swift 3,它已经不再适用了。我该怎么办?
答案 0 :(得分:1)
NSDictionary
,使用Swift native Dictionary
valueForKey
,请使用密钥订阅mutableContainers
,如果您想要更改某些内容,请使用var
Dictionary
。为方便起见,声明JSON字典的类型别名
typealias JSONDictionary = [String:Any]
在Swift 3中,编译器需要知道所有中间对象的类型,最安全的解决方案是
if let dic = try JSONSerialization.jsonObject(with:data!, options: []) as? JSONDictionary {
if let results = dic["results"] as? JSONDictionary,
let geometry = results["geometry"] as? JSONDictionary,
let location = geometry["location"] as? JSONDictionary,
let latitudes = location["lat"] as? [Double], !latitudes.isEmpty,
let longitudes = location["lng"] as? [Double], !longitudes.isEmpty {
let lat = latitudes[0]
let lng = longitudes[0]
}
}
对于那种嵌套的JSON,请考虑使用类似SwiftyJSON的库。