2016-09-29 93 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很陌生,所以这是非常有帮助的 –

相关问题