在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}