Я устанавливаю пользовательский 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 {
barfs с "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'."
КонечноМне не хватает чего-то очень простого, но что?