swift - Swift:无法使用关联数据捕获特定错误情况
问题描述
如果日期格式不正确JSONDecoder.dateDecodingStrategy
,我正在设置一个自定义项:DecodingError.dataCorruptedError
decoder.dateDecodingStrategy = .custom { (decoder) -> Date in
let container = try decoder.singleValueContainer()
let dateString = try container.decode(String.self)
let date = /* do magic date manipulation here */
if let date = date {
return date
} else {
throw DecodingError.dataCorruptedError(in: container,
debugDescription: "foo")
}
}
但是,我似乎无法为这种特定类型编写catch
子句。DecodingError
我试过了
} catch DecodingError.dataCorruptedError(let container, let debugDescription) {
和
} catch DecodingError.dataCorruptedError(_, _) {
两者都表明"Argument labels '(_:, _:)' do not match any available overloads."
完全忽略相关数据,例如
} catch DecodingError.dataCorruptedError {
与"Expression pattern of type '_' cannot match values of type 'Error'."
所以我尝试了另一种方法,即
} catch let error as DecodingError {
switch error {
case .dataCorruptedError(_, _):
但这也无法编译,说明"Pattern cannot match values of type 'DecodingError'."
当然我错过了一些非常简单的东西,但是什么?
解决方案
DecodingError.dataCorruptedError(in:debugDescription:)
是一个静态函数 over DecodingError
,这个函数返回.dataCorrupted
大小写。因此,您的 catch 语句应如下所示:
} catch DecodingError.dataCorrupted(let context) {
您应该能够从上下文中提取一些信息,如果您需要更多信息,那么您可能需要专门的错误类型。
推荐阅读
- sql - 将非顺序的数字集划分为某些组,并在 oracle 数据库中作为行返回
- java - 我想用 Java 将二维数组中的数据复制到 Excel 工作表中
- c++ - 在 windows/c++ 上使用多进程应用程序进行高精度定时操作
- sql - MS Access COUNT 与 INNER JOIN
- php - PHP to JSON 如何获取所有条目?
- python-3.x - PyAutoGui - 定位看不到右键菜单
- batch-file - 需要一些关于批处理文件的提示
- android - 无法访问 ActivityCompatApi23 - Kotlin - AndroidX - Dagger 2.17
- visual-studio - 使用 windeployqt 发布版本中的“未安装模块 QtQuick”错误
- spring - 在 Java 9 多模块环境中无法解析持久性单元根 URL