gpt4 book ai didi

swift - 使用和不使用数组解码不同类型

转载 作者:行者123 更新时间:2023-12-02 02:36:02 27 4
gpt4 key购买 nike

我试图按如下方式解码错误,大多数错误都是以数组格式[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 {
// ..
}

关于swift - 使用和不使用数组解码不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64307042/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com