在swift中从api访问嵌套字典
天哪…一定有更好的方法来访问在swift中从api访问嵌套字典,swift,optional,Swift,Optional,天哪…一定有更好的方法来访问 floorplan_summary: { bedrooms: { low: 1, high: 2, formatted: "1 - 2 Beds" } } 而不是这样做: if data["floorplan_summary"]?["bedrooms"] != nil { let bedrooms = data["floorplan_summary"]?["bedrooms"]
floorplan_summary: {
bedrooms: {
low: 1,
high: 2,
formatted: "1 - 2 Beds"
}
}
而不是这样做:
if data["floorplan_summary"]?["bedrooms"] != nil {
let bedrooms = data["floorplan_summary"]?["bedrooms"] as NSDictionary
if bedrooms["formatted"] != nil{
self.beds = bedrooms["formatted"] as String
}
}
我只想这样做:
self.beds = data["floorplan_summary"]?["bedrooms"]?["formatted"] as String
…但在每个级别,对象似乎都被转换为AnyObject
。为什么编译器可以假定此数据[“楼层平面图摘要”]?[“卧室”]
而不是上述数据
如何简化此操作?如果您需要所描述的语法,我建议使用。它看起来非常流行,并且都在一个swift文件中实现,所以将其添加到项目中并不困难。它看起来像这样
let floorPlanSummary = JSON(data: yourRawData)
self.beds = floorPlanSummery["bedrooms"]["formatted"].string
假设
数据是NSDictionary
或[字符串:AnyObject]
,您可能只需要调用data.valueForKeyPath(“floorplan\u summary.bedrooms.formatted”)
。你可以:
let beds = data["floorplan_summary"]?["bedrooms"]??["formatted"] as? String // -> as String?
^
您需要额外的?
,因为数据[“楼层平面图摘要”]?[“卧室”]
返回任何对象??
。您必须将其展开两次
为什么它返回任何对象??
?因为数据[“平面布置图摘要”]?
是任何对象
,并且任何对象
可能有也可能没有下标
。因此,第一个?
表示“如果它有下标”,第二个表示“如果下标返回非nil
”调用data.valueForKeyPath(“floorplan\u summary.bellooms.formatted”)
如何那个请回答这个问题,我会接受的。哇…那是什么东西??这一部分花了我半天的时间在谷歌上搜索。非常感谢。我有这本字典:我试图访问latitude作为let restaurantLat=restaurants[indexPath.row][“geometry”]??[“location”]?[“lat”]?作为?双重结果“:[{“几何”:{“位置”:{“纬度”:44.1671892,“液化天然气”:-93.9568122}