Свойство Swift Codable может быть Array или Dictionary
У меня есть ответ где data
свойство может быть типом массива или может быть типом словаря.
В случае массива мне нужен его первый объект (мне все равно, равен он нулю или нет)
Я исправил это с помощью следующего кода, я не знаю, это правильный путь или нет, для меня это похоже на взлом или временное решение
struct CampaignSearchResponse: Codable {
let settings: CampignSearchSettings?
var data: CampaignSearchResponseData? // Data May be array or dictionary
enum CodingKeys : CodingKey {
case settings, data
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
settings = try values.decode(CampignSearchSettings.self, forKey: .settings)
do {
data = try values.decode(CampaignSearchResponseData.self, forKey: .data)
} catch {
if data == nil {
data = try (values.decode(Array<CampaignSearchResponseData>.self, forKey: .data)).first
}
}
}
}
Кто-нибудь может подсказать мне, правильно это или нет?