【发布时间】:2017-06-22 10:19:13
【问题描述】:
我正在调用 REST API 以从服务器获取响应,并且还测试了错误的数据类型以捕获在 try catch block nut 应用程序中仍然崩溃并出现以下错误:
无法将“__NSArrayM”(0x10575ee00) 类型的值转换为“NSDictionary”(0x10575f2d8)。
let dataTask = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
print(error!)
return
}
do {
let responseObject = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as! Dictionary<String,String>
print(responseObject)
} catch let jsonError {
print(jsonError)
}
}
dataTask.resume()
为此,我也找到了先用 JSON 格式检查数据,然后使用 JSONSerialization 的解决方案。
if JSONSerialization.isValidJSONObject(data){
responseObject = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as! Dictionary<String,String>
}
else {
print("Error")
}
我想知道如果类型转换值错误没有被 try-catch 块捕获,那么 try-catch 块在网络调用中的用途是什么。我可以简单地检查 @987654323 @ 格式并传递响应对象。
什么是好的编程习惯?
注意:错误不是问题,我只是不希望我的应用程序在数据类型从字典更改为数组或非指定类型时崩溃。
【问题讨论】: