我收到以下错误:
'catch' block is unreachable because no errors are thrown in 'do' block
Run Code Online (Sandbox Code Playgroud)
但是我的尝试存在,那么我如何包含错误?
AF.request(url).responseData(completionHandler: { data in
do {
if let apiJsonData = try? JSONDecoder().decode(MyModel.self, from: data.data!){
self.items = apiJsonData.data.items
}
} catch {
print("Decoding failed -> ERROR:", error)
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将它包含在标题中,例如:data, error in它会引发错误:
Contextual closure type '(AFDataResponse<Data>) -> Void' (aka '(DataResponse<Data, AFError>) -> ()') expects 1 argument, but 2 were used in closure body
Run Code Online (Sandbox Code Playgroud)
如何正确设置 try catch?
你用过try?,没有try。
try?将整个表达式转换为nilif 抛出错误。它已经自行处理了错误,因此catch块不再需要捕获错误。另一方面,try不这样做。有关更多信息,请参阅Swift 指南的错误处理部分。
如果您希望catch块捕获错误,则应使用try,并删除if块。
AF.request(url).responseData(completionHandler: { data in
do {
let apiJsonData = try JSONDecoder().decode(MyModel.self, from: data.data!)
self.items = apiJsonData.data.items
} catch {
print("Decoding failed -> ERROR:", error)
}
}
Run Code Online (Sandbox Code Playgroud)
另请注意,您在data.data这里假设不为零。如果网络请求失败,情况可能并非如此。最好检查一下:
AF.request(url).responseData(completionHandler: { data in
do {
guard let data = data.data else {
print("Response Error:", data.error)
return
}
let apiJsonData = try JSONDecoder().decode(MyModel.self, from: data.data!)
self.items = apiJsonData.data.items
} catch {
print("Decoding failed -> ERROR:", error)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38 次 |
| 最近记录: |