Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理无法强制转换类型为'__NSCFConstantString&x27;(0x3aaf2fec)到';NSDictionary';IOS Swift中的(0x3aaf33c0)错误_Ios_Swift - Fatal编程技术网

如何处理无法强制转换类型为'__NSCFConstantString&x27;(0x3aaf2fec)到';NSDictionary';IOS Swift中的(0x3aaf33c0)错误

如何处理无法强制转换类型为'__NSCFConstantString&x27;(0x3aaf2fec)到';NSDictionary';IOS Swift中的(0x3aaf33c0)错误,ios,swift,Ios,Swift,在我的应用程序中,我从服务器获得JSON响应,并使用一种通用方法对所有API调用进行相同的解析 这是JSON响应 {"event":"event_process","status":0,"data":""} 对于这个paritcularapi,数据参数是字符串,其中所有其他API都返回一个字典。所以,在解析相同的代码时,我遇到了以下错误,应用程序正在崩溃 无法将类型为“\uuu NSCFConstantString”(0x3aaf2fec)的值强制转换为“NSDictionary”(0x3aa

在我的应用程序中,我从服务器获得JSON响应,并使用一种通用方法对所有API调用进行相同的解析

这是JSON响应

{"event":"event_process","status":0,"data":""}
对于这个paritcularapi,数据参数是字符串,其中所有其他API都返回一个字典。所以,在解析相同的代码时,我遇到了以下错误,应用程序正在崩溃

无法将类型为“\uuu NSCFConstantString”(0x3aaf2fec)的值强制转换为“NSDictionary”(0x3aaf33c0)

有没有办法在不崩溃的情况下处理此错误,这样即使数据是字符串,应用程序也会运行

PS:我尝试了以下解决方案,但没有成功

var json: Dictionary<String, AnyObject> = [:]
do {
    json = try (NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) as? [String:AnyObject])!
} catch let error as NSError {
    // print(error)
}

// print(json)
var dict:Dictionary<String, AnyObject>
do {
    dict = try (json["data"] as! Dictionary<String, AnyObject>)
} catch {
    dict = Dictionary<String,AnyObject>()
}
var-json:Dictionary=[:]
做{
json=try(NSJSONSerialization.JSONObjectWithData(数据,选项:NSJSONReadingOptions())为?[String:AnyObject])!
}将let错误捕获为NSError{
//打印(错误)
}
//打印(json)
字典
做{
dict=try(json[“数据”]as!字典)
}抓住{
dict=字典()
}
您的问题在于:

(json["data"] as! Dictionary<String, AnyObject>)
(json[“数据”]as!字典)
数据
不是以字符串作为键的字典。它是一个空字符串:
“数据”:“

如果希望应用程序停止崩溃,请停止尝试将字符串转换为字典

注意:

此外,您的应用程序正在崩溃,因为您正在强制施放(在
后面使用感叹号作为
)。在99%的情况下,强制铸造和强制展开通常都是不好的主意。使用可选的展开(问号而不是感叹号)并测试
nil
,以避免出现问题时应用程序崩溃

这在苹果的免费swift书中有详细的解释。

错误消息

无法将类型为“\uu NSCFConstantString”的值强制转换为“NSDictionary”

表示需要
字符串
,但传递了
字典
。 导致错误的行是

dict = try (json["data"] as! Dictionary<String, AnyObject>)

嘿,在您的示例中,数据是空字符串,显然不能转换为字典
do {
  if let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject],
    jsonData = json["data"] as? String {
    print(jsonData)
    // do something with jsonData
  }
} catch let error as NSError {
  print(error)
}