天哪......还有必须有更好的方式来访问formatted的
floorplan_summary: {
bedrooms: {
low: 1,
high: 2,
formatted: "1 - 2 Beds"
}
}
Run Code Online (Sandbox Code Playgroud)
比这样做:
if data["floorplan_summary"]?["bedrooms"] != nil {
let bedrooms = data["floorplan_summary"]?["bedrooms"] as NSDictionary
if bedrooms["formatted"] != nil{
self.beds = bedrooms["formatted"] as String
}
}
Run Code Online (Sandbox Code Playgroud)
我想这样做:
self.beds = data["floorplan_summary"]?["bedrooms"]?["formatted"] as String
Run Code Online (Sandbox Code Playgroud)
..但在每个级别,对象似乎都被视为AnyObject.为什么编译器会假设这个data["floorplan_summary"]?["bedrooms"]而不是上面的?
我该如何简化这个?
假设data是NSDictionary,或[String:AnyObject].您可以:
let beds = data["floorplan_summary"]?["bedrooms"]??["formatted"] as? String // -> as String?
^
Run Code Online (Sandbox Code Playgroud)
你需要额外的,?因为data["floorplan_summary"]?["bedrooms"]回报AnyObject??.你必须打开两次.
为什么会回来AnyObject???由于data["floorplan_summary"]?是AnyObject,和AnyObject 可能会或可能不会有subscript.所以,第一个?意思是"如果它有subscript",第二个意思是"如果subscript返回非nil".
| 归档时间: |
|
| 查看次数: |
1423 次 |
| 最近记录: |