2016-09-29 31 views
0

我不太確定爲什麼我得到這個錯誤。有什麼我不是一個可選值或某種期權方面檢查,我很想念JSON致命錯誤:意外地發現零,而解包一個可選值

func getJSON(){ 

    let url = NSURL(string: myURL) 
    let request = NSURLRequest(url: url! as URL) 
    let session = URLSession(configuration: URLSessionConfiguration.default) 
    let task = session.dataTask(with: request as URLRequest) { (data,response,error) -> Void in 

     if error == nil { 

      let swiftyJSON = JSON(data:data!) 

      let theTitle = swiftyJSON["results"].arrayValue 

      for title in theTitle{ 

       let titles = title["title"].stringValue 
       print(titles) 
      } 


     } else{ 
      print("Error") 
     } 
    } 
    task.resume() 
} 
+1

你從哪裏得到這個錯誤,哪一行? – Moritz

+2

你的命名(複數 - 多個項目'theTitle'和單數 - 一個項目'titles')相當混亂。因爲你使用的是Swift 3,所以有'URL'和'URLRequest'。 – vadian

+0

錯誤發生在請求行上:let request = NSURLRequest(url:url!as URL) –

回答

2

如果錯誤是url是零,當你強迫展開它,那麼這意味着在行之前,您創建url您已經傳遞了myURL值,出於某種原因實際上不能解析爲NSURL對象。

打印出myURL看看它是什麼。我敢打賭,這不是完整的。

順便說一句,你不應該強行解開包裝。試試這樣的:

guard let url = NSURL(string: myURL) else { 
    print("Couldn't parse myURL = \(myURL)") 
    return 
} 

let request = NSURLRequest(url: url as URL) // <-- No need to force unwrap now. 
+0

非常感謝你。那麼是不是像各種安全網一樣展開? –

+1

不完全。在某些情況下,您需要說「不,真的,相信我,我知道我在做什麼」,但大多數情況下,如果您有可選項,則需要在使用前妥善解開它。最簡單的方法是使用'guard let foo = someOptional'或'if let foo = someOptional'。 –

+0

非常感謝。我對swift很陌生,所以這是非常有幫助的 –

相關問題