2016-02-05 53 views
-1

在使用alamofire https://maps.googleapis.com/maps/api/directions/json?origin=(self.startlat,self.startlng)&destination=(self.endlat,self.endlng錯誤意外地發現零而展開的可選值

我收到此錯誤所有的時間打電話:

'fatal error: unexpectedly found nil while unwrapping an Optional value'

我也試試這個

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)") 

       } 
      } 
     } 
    } 
} 

,但我仍然會有同樣的錯誤。

+0

'guard/else'是你的朋友;) –

+0

你還有幾個強制解包。調試器光標指向哪一行? –

+0

保持力量展開從來不是一個好主意,如果你覺得懶得'如果let'或'guard let'那麼考慮使用[Swifty JSON](https://github.com/SwiftyJSON/SwiftyJSON),它會幫助 – Tj3n

回答

0

從谷歌的API調用JSON結果:

{ 
    "geocoded_waypoints" : [ 
     { 
     "geocoder_status" : "ZERO_RESULTS" 
     }, 
     { 
     "geocoder_status" : "ZERO_RESULTS" 
     } 
    ], 
    "routes" : [], 
    "status" : "NOT_FOUND" 
} 

似乎您試圖訪問res["routes"][0]!!,但在這種情況下,(在你的鏈接)res["routes"] JSON元素是一個空數組。

+0

但是,此直接值鏈接「https://maps.googleapis.com/maps/api/directions/json?origin=28.6691565,2077.4537578&destination=28.4594965,2077.0266383」正在工作 – sasuke

+0

是鏈接完全正常工作,但在路由元素中,您是試圖獲得數組的第一個值,但數組是空的。在獲取其中一個之前,你必須檢查數組是否有值。 – Nerkyator

+0

「'\(self.startlat)'」自動添加「(」在字符串中如何避免? – sasuke

相關問題