Свойство 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
            }
        }
    }


}

Кто-нибудь может подсказать мне, правильно это или нет?

0 ответов

Другие вопросы по тегам