展开 Swift 中的可选值错误
Unwrapping an Optional value error in Swift
根据问题主题,这是一个非常常见的问题,堆栈上有很多答案,但我对错误保证案例的行为感到困惑。我对 Swift 有点陌生,我有一些代码。在这段代码中,有时我得到 Unwrapping an Optional value
的错误
下面是代码
let operation = AFHTTPRequestOperation(request: request)
operation.setCompletionBlockWithSuccess({ (operation:AFHTTPRequestOperation!, responseObject:AnyObject!) -> Void in
var error:NSError?
//Bellow line gives me an error
let responseDict = NSJSONSerialization.JSONObjectWithData(responseObject as! NSData, options:NSJSONReadingOptions.MutableContainers, error: &error) as! NSDictionary
Error: fatal error: unexpectedly found nil while unwrapping an Optional value
注意:只有当我的互联网连接中断时,这一行才会给我和错误。当互联网完全断开时,此错误不会出现,它会转到 AFNetworking 的 Error
块。当互联网完全正常工作时,我也没有收到此错误。
请建议修改或替换代码。
在这种情况下,您的 responseDict
可能无效 JSON。每当您遇到这样的错误时,请仔细查看所有强制解包的可选值。在这种情况下:
let responseDict = NSJSONSerialization.JSONObjectWithData(responseObject as! NSData, options:NSJSONReadingOptions.MutableContainers, error: &error) as! NSDictionary
改为使用:
if let responseDict = NSJSONSerialization.JSONObjectWithData(responseObject as! NSData, options:NSJSONReadingOptions.MutableContainers, error: &error) as? NSDictionary {
// Response was valid JSON
}
您需要打开可选的 responseObject
。当连接断开时它很可能是零(这很有意义)。
if let response = responseObject as? NSData {
let responseDict = NSJSONSerialization.JSONObjectWithData(response, ...
}
根据问题主题,这是一个非常常见的问题,堆栈上有很多答案,但我对错误保证案例的行为感到困惑。我对 Swift 有点陌生,我有一些代码。在这段代码中,有时我得到 Unwrapping an Optional value
的错误下面是代码
let operation = AFHTTPRequestOperation(request: request)
operation.setCompletionBlockWithSuccess({ (operation:AFHTTPRequestOperation!, responseObject:AnyObject!) -> Void in
var error:NSError?
//Bellow line gives me an error
let responseDict = NSJSONSerialization.JSONObjectWithData(responseObject as! NSData, options:NSJSONReadingOptions.MutableContainers, error: &error) as! NSDictionary
Error: fatal error: unexpectedly found nil while unwrapping an Optional value
注意:只有当我的互联网连接中断时,这一行才会给我和错误。当互联网完全断开时,此错误不会出现,它会转到 AFNetworking 的 Error
块。当互联网完全正常工作时,我也没有收到此错误。
请建议修改或替换代码。
在这种情况下,您的 responseDict
可能无效 JSON。每当您遇到这样的错误时,请仔细查看所有强制解包的可选值。在这种情况下:
let responseDict = NSJSONSerialization.JSONObjectWithData(responseObject as! NSData, options:NSJSONReadingOptions.MutableContainers, error: &error) as! NSDictionary
改为使用:
if let responseDict = NSJSONSerialization.JSONObjectWithData(responseObject as! NSData, options:NSJSONReadingOptions.MutableContainers, error: &error) as? NSDictionary {
// Response was valid JSON
}
您需要打开可选的 responseObject
。当连接断开时它很可能是零(这很有意义)。
if let response = responseObject as? NSData {
let responseDict = NSJSONSerialization.JSONObjectWithData(response, ...
}