我的json对象是这样的
["Success": 0, "Message": Tenant not found, "ControlId": <null>, "Source": <null>, "Result": 0, "ErrorCode": 4, "Description": ]
这是我用来检查成功值的代码。
if (response.result.value as? [String: Any]) != nil {
// ...
let json=response.result.value as? [String: Any]
print(json!)
let successCode:Int=json!["Success"] as! Int
if(successCode==0)
{
dm.errorMessage=json!["Message"] as! String
callback("error")
}
else if(successCode>0)
{
dm.responseDict=json
callback("success")
}
}
这是什么原因?以及如何解决这个问题? 请帮我 感谢
答案 0 :(得分:2)
你不能只是强行施放并强行打开一切。当您的应用程序崩溃时,由于您对游戏中的数据类型没有根据的假设,请不要感到惊讶。使用条件绑定来适当地处理错误:
guard let json = response.result.value as? [String: Any] else {
//TODO: Handle error here safely
fatalError("response.result.value is not of type [String: Any].")
}
print(json)
guard let successCode = json["Success"] as? Int else {
//TODO: Handle error here safely
fatalError("successCode doesn't exist or exists but is not valid a valid Int.")
}
switch successCode {
case 0:
guard let message = json["Message"] as? String else {
//TODO: Handle error here safely
fatalError("Messange not present, or is not a String.")
}
dm.errorMessage = message
callback("error")
case 1...Int.max:
dm.responseDict = json
callback("success")
}
答案 1 :(得分:0)
使用!
而不是使用?
强制解包。这将阻止应用程序崩溃。
答案 2 :(得分:-2)
如果代码崩溃,则密钥Success
的值为Bool
或String
。
基本上你的代码非常 objectivecish ,这是一个 swiftier 版本
if let result = response.result.value as? [String: Any] {
print(result)
//TODO: Handle optional safely
let success = result["Success"] as! Bool
if success {
dm.responseDict = result
callback("success")
} else {
//TODO: Handle optional safely
dm.errorMessage= result["Message"] as! String
callback("error")
}
} else {
callback("result is not a dictionary")
}