"Ручной" парсинг JSON используя Decodable


#1

Я получаю JSON вот такой структуры:

{
    "market_cap": [1522184067000,135864381010]
}

Структура выглядит вот так:

struct Coin: Decodable {
    
    let marketCap: [Int]
    
    var mkDate: Int
    var mkValue: Int
    
    enum CodingKeys: String, CodingKey {
        case marketCap = "market_cap"
        
        case mkDate
        case mkValue
    }
    
}

Хочу сделать так, чтобы при парсинге первый элемент массива marketCap уходил в mkDate, а второй в mkValue. Знаю, что это нужно наверняка делать в методе init(from decoder: Decoder), но я не понимаю как “разложить” массив.

P.S.
Я, возможно, мог бы придумать что-то с didSet и т.д., но хочется узнать реализацию напрямую, так сказать


#2
struct Coin: Decodable {
    private enum CodingKeys: String, CodingKey {
        case marketCap = "market_cap"
    }
    var mkDate: Int
    var mkValue: Int
    init(from decoder: Decoder) throws {
        let arr = try (try decoder.container(keyedBy: CodingKeys.self)).decodeIfPresent([Int].self, forKey: .marketCap)
        mkDate = arr?.first ?? 0
        mkValue = arr?.last ?? 0
    }
}