如何处理无法强制转换类型为'__NSCFConstantString&x27;(0x3aaf2fec)到';NSDictionary';IOS Swift中的(0x3aaf33c0)错误
在我的应用程序中,我从服务器获得JSON响应,并使用一种通用方法对所有API调用进行相同的解析 这是JSON响应如何处理无法强制转换类型为'__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
{"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)
}