如何解决使用和不使用数组解码不同的类型
我正在尝试按以下方式解码错误,即我正在处理的大多数错误都是数组格式[String]
,但是在少数情况下,该错误不是数组格式的,只是String
。
如果错误出现在数组格式中,名称为errors
,但如果是字符串格式,则为error
。我该如何处理这种情况?
如何处理这种情况?
struct CustomError: Codable {
let errors: [String]
}
private func errorDecoding(data : Data) {
let decoder = JSONDecoder()
do {
let errorData = try decoder.decode(CustomError.self,from: data)
} catch {
// Todo
}
}
解决方法
您必须手动实现init(from:)
并尝试对一种类型进行解码,如果失败,则对另一种类型进行解码:
struct CustomError {
let errors: [String]
}
extension CustomError: Decodable {
enum CodingKeys: CodingKey { case errors,error }
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
do {
self.errors = try container.decode([String].self,forKey: .errors)
} catch DecodingError.typeMismatch,DecodingError.keyNotFound {
let error = try container.decode(String.self,forKey: .error)
self.errors = [error]
}
}
}
解码部分正常:
do {
let error = try JSONDecoder().decode(CustomError.self,from: data)
} catch {
// ..
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。