将任何对象字典中的值提取到数组中
Extracting values from anyobject dictionary into array
我的另一个问题被标记为与另一个问题相同,但它没有回答我遇到的问题。
代码如下:
if status == "OK" {
self.selectedRoute = (dictionary["routes"] as! Array<Dictionary<NSObject, AnyObject>>)[0]
self.overviewPolyline = self.selectedRoute["overview_polyline"] as! Dictionary<NSObject, AnyObject>
let legs = self.selectedRoute["legs"] as! Array<Dictionary<NSObject, AnyObject>>
let steps = legs[0]["steps"]!
for i in 0...steps.count - 1 {
let step_coordinate = steps[i]["start_location"]!
print(step_coordinate!["lat"]!!)
}
}
打印语句给出了这个结果
40.7609205
40.7640121
40.7595325
40.7501637
40.7481923
40.7393448
40.7252038
40.7225337
40.718295
但是如果我将 print 语句换出以获取值并将它们放入数组中,我会得到致命错误:found nil。
谁能解释一下为什么会这样?如果不通过 for 循环,我如何获取这些值?
这是您的代码的更简洁版本。
规则:
- 不要强行打开任何东西!
- 可选择转换来自
[NSObject: AnyObject]
查找的值。
- 使用
guard
语句和 if let
安全地解包可选值。
- 不要在未先检查的情况下为可能为空的数组编制索引。
if status == "OK" {
guard let routes = dictionary["routes"] as? [[NSObject: AnyObject]] else { return }
self.selectedRoute = routes.first ?? [:]
self.overviewPolyline = self.selectedRoute["overview_polyline"] as? [NSObject: AnyObject] ?? [:]
guard let legs = self.selectedRoute["legs"] as? [[NSObject: AnyObject]] else { return }
let firstleg = legs.first ?? [:]
guard let steps = firstleg["steps"] as? [[NSObject: AnyObject]] else { return }
for step in steps {
if let step_coordinate = step["start_location"] as? [NSObject: AnyObject] {
if let lat = step_coordinate["lat"] as? Double {
print(lat)
// append lat to array of lats
lats.append(lat)
}
}
}
}
我的另一个问题被标记为与另一个问题相同,但它没有回答我遇到的问题。
代码如下:
if status == "OK" {
self.selectedRoute = (dictionary["routes"] as! Array<Dictionary<NSObject, AnyObject>>)[0]
self.overviewPolyline = self.selectedRoute["overview_polyline"] as! Dictionary<NSObject, AnyObject>
let legs = self.selectedRoute["legs"] as! Array<Dictionary<NSObject, AnyObject>>
let steps = legs[0]["steps"]!
for i in 0...steps.count - 1 {
let step_coordinate = steps[i]["start_location"]!
print(step_coordinate!["lat"]!!)
}
}
打印语句给出了这个结果
40.7609205
40.7640121
40.7595325
40.7501637
40.7481923
40.7393448
40.7252038
40.7225337
40.718295
但是如果我将 print 语句换出以获取值并将它们放入数组中,我会得到致命错误:found nil。
谁能解释一下为什么会这样?如果不通过 for 循环,我如何获取这些值?
这是您的代码的更简洁版本。
规则:
- 不要强行打开任何东西!
- 可选择转换来自
[NSObject: AnyObject]
查找的值。 - 使用
guard
语句和if let
安全地解包可选值。 - 不要在未先检查的情况下为可能为空的数组编制索引。
if status == "OK" {
guard let routes = dictionary["routes"] as? [[NSObject: AnyObject]] else { return }
self.selectedRoute = routes.first ?? [:]
self.overviewPolyline = self.selectedRoute["overview_polyline"] as? [NSObject: AnyObject] ?? [:]
guard let legs = self.selectedRoute["legs"] as? [[NSObject: AnyObject]] else { return }
let firstleg = legs.first ?? [:]
guard let steps = firstleg["steps"] as? [[NSObject: AnyObject]] else { return }
for step in steps {
if let step_coordinate = step["start_location"] as? [NSObject: AnyObject] {
if let lat = step_coordinate["lat"] as? Double {
print(lat)
// append lat to array of lats
lats.append(lat)
}
}
}
}