展开可选值时意外发现 nil 错误
Posted
技术标签:
【中文标题】展开可选值时意外发现 nil 错误【英文标题】:error unexpectedly found nil while unwrapping an Optional value 【发布时间】:2016-02-05 07:36:31 【问题描述】:使用 alamofire 调用时https://maps.googleapis.com/maps/api/directions/json?origin=(self.startlat,self.startlng)&destination=(self.endlat,self.endlng)
我一直收到这个错误:
'致命错误:在展开可选值时意外发现 nil'
我也试试这个
if let slat = startlat
if let slng = self.startlng
if let elat = self.endlat
if let elng = self.endlng
Alamofire.request(.GET, "https://maps.googleapis.com/maps/api/directions/json?origin=\(slat,slng)&destination=\(elat,elng)" , encoding: .JSON)
.responseJSON response in
let res = response.result.value!
self.estimatedDistance = (res["routes"]!![0]["legs"]!![0]["distance"]!!["value"] as! Int)/1000
self.estimatedTime = (res["routes"]!![0]["legs"]!![0]["duration"]!!["value"] as! Int)/60
print("\(self.estimatedDistance) - \(self.estimatedTime)")
但我仍然遇到同样的错误。
【问题讨论】:
guard/else
是你的朋友 ;)
您仍然有几个强制展开。调试器光标指向哪一行?
保持强制展开从来都不是一个好主意,如果你对if let
或guard let
感到懒惰,那么考虑使用Swifty JSON,它会有所帮助
【参考方案1】:
来自 Google api 调用的 JSON 结果:
"geocoded_waypoints" : [
"geocoder_status" : "ZERO_RESULTS"
,
"geocoder_status" : "ZERO_RESULTS"
],
"routes" : [],
"status" : "NOT_FOUND"
您似乎正在尝试访问res["routes"][0]!!
,但在这种情况下(在您的链接中)res["routes"]
JSON 元素是一个空数组。
【讨论】:
但是这个直接价值链接“maps.googleapis.com/maps/api/directions/…”是有效的 是的链接完全正常,但在路由元素中,您试图获取数组的第一个值,但数组为空。您必须在获取其中一个之前检查数组是否有值。 "'(self.startlat)'" 自动在字符串中添加“(”如何避免??以上是关于展开可选值时意外发现 nil 错误的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire 平面错误:在展开可选值时意外发现 nil