Mendekode tipe yang berbeda dengan dan tanpa array
Oct 12 2020
Saya mencoba memecahkan kode kesalahan sebagai berikut, sebagian besar kesalahan yang saya tangani dalam format array [String], tetapi dalam beberapa kasus kesalahan tersebut tidak dalam format array, hanya a String.
Jika kesalahan datang dalam format array nama datang sebagai errors, tetapi jika itu adalah format string maka itu datang sebagai error. Bagaimana saya bisa menangani skenario ini?
Bagaimana saya bisa menangani skenario ini?
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
}
}
Jawaban
4 NewDev Oct 12 2020 at 00:35
Anda harus menerapkan init(from:)dan mencoba mendekode satu jenis secara manual , jika gagal, mendekode yang lain:
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]
}
}
}
Bagian decoding normal:
do {
let error = try JSONDecoder().decode(CustomError.self, from: data)
} catch {
// ..
}
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'