【发布时间】:2016-01-14 15:13:42
【问题描述】:
我收到错误“致命错误:在展开可选值时意外发现 nil”。我正在尝试从我的服务器获取 JSON 作为字典。如果数据为 nil,如何抛出错误?
let jsonUrl = "jsonurl"
let session = NSURLSession.sharedSession()
let shotsUrl = NSURL(string: jsonUrl)
let task = session.dataTaskWithURL(shotsUrl!, completionHandler: {
(data,response,error) -> Void in
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) // Get error
dispatch_async(dispatch_get_main_queue()) {
for newData in json as! [Dictionary<String, AnyObject>] {
// do stuff
}
}
} catch {
}
})
task.resume()
编辑:澄清一下,我在没有互联网连接时进行测试,它应该忽略抛出的错误,而是给出错误。我试过了
guard let data = data else { return }
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
但它在 let json 行上显示“无法强制解开可选类型 'NSData'”
【问题讨论】:
-
把它放在你的 let json 上面:guard let data = data else { return },这样可以安全地解开你的可选项。但这不是您的问题,您的数据返回为零。
-
对您的数据使用安全展开。 stackoverflow.com/questions/24018327/… 不要用
!强制解包。