JSON致命错误:在展开可选值时意外发现nil
我不太清楚为什么会出现这个错误。是否有一些我没有检查的可选值或某种我缺少的选项JSON致命错误:在展开可选值时意外发现nil,json,swift,swifty-json,Json,Swift,Swifty 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(
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()
}
如果在强制展开时,错误是
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.
guard let url=NSURL(字符串:myURL)else{
打印(“无法分析myURL=\(myURL)”)
返回
}
让request=NSURLRequest(url:url as url)/如果强制展开时错误是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.
guard let url=NSURL(字符串:myURL)else{
打印(“无法分析myURL=\(myURL)”)
返回
}
let request=NSURLRequest(url:url as url)//您从哪里得到这个错误,哪一行?您的命名(复数-多个项目theTitle
和单数-一个项目titles
)非常混乱。由于您使用的是Swift 3,因此有URL
和URLRequest
。错误出现在请求行:let request=NSURLRequest(URL:URL!as URL),则URL不正确,并强制展开URL代码>导致错误。你从哪里得到这个错误,哪一行?你的命名(复数-多个项目标题
和单数-一个项目标题
)非常混乱。由于您使用的是Swift 3,因此有URL
和URLRequest
。错误出现在请求行:let request=NSURLRequest(URL:URL!as URL),则URL不正确,并强制展开URL代码>导致错误。哇,非常感谢。那么,拆开包装就像是某种安全网吗?不完全是这样。在某些情况下,你需要说,“不,真的,相信我,我知道我在做什么”,但在大多数情况下,如果你有一个可选的,你需要在使用它之前正确地打开它。最简单的方法是使用guard let foo=someOptional
或如果let foo=someOptional
。非常感谢。我是swift的新手,所以这是非常有帮助的进一步阅读:@NickBalistreri你应该看看并阅读苹果的《swift编程语言》一书的相关章节。哇,非常感谢。那么,拆开包装就像是某种安全网吗?不完全是这样。在某些情况下,你需要说,“不,真的,相信我,我知道我在做什么”,但在大多数情况下,如果你有一个可选的,你需要在使用它之前正确地打开它。最简单的方法是使用guard let foo=someOptional
或如果let foo=someOptional
。非常感谢。我是swift的新手,因此这是非常有帮助的进一步阅读:@NickBalistreri您应该看到并阅读苹果公司《swift编程语言》一书的相关章节。