Asignación de datos de documentos personalizados de Firestore

Modelo Firestore

Tengo la siguiente estructura de datos en Firestore. Tengo dificultades para asignarlo a mi aplicación ios. Estoy usando Swift. ¿Alguien podría proporcionar la estructura codificable o algo así?

struct CartModel: Codable {

    let cart: [CartItemModel]
   
    enum CodingKeys: String, CodingKey {
        case cart
    }    
}

extension CartModel{
    static var dummyCartData : CartModel {
        .init(cart: [CartItemModel.dummyCartData])
    }
}


struct CartItemModel: Codable {
    let brand: String
    let itemDescription: String
    let image: String
    let selection: [UserSelection]
    let title:String    
   
    enum CodingKeys: String, CodingKey {
        
        case brand
        case itemDescription = "description"
        case image
        case selection
        case title

    }
}


extension CartItemModel{
    static var dummyCartData : CartItemModel {

        .init(brand: "gucci",
              itemDescription: "adidas",
              image: "yeezy",
              selection: [UserSelection.dummyData],
              title: "123")
    }
}


struct UserSelection: Codable, Equatable{
    var size :String
    var count : Int

    enum CodingKeys: String, CodingKey {
        case size = "size"
        case count
    }

}

extension UserSelection{

    static var dummyData : UserSelection {

        .init(size: "XS11", count: 20)
    }
}


    docRef.getDocument { (snapshot, error) in
        if error != nil {
            return
        }

        if let snapshot = snapshot, snapshot.exists {
            print(snapshot.data())
        let products = try! snapshot.data(as: CartModel.self)
            print(products)
       
        }
    }

Vuelve Firestore

Optional(["cart": <__NSArrayM 0x600002979380>(
{
    brand = Nike;
    description = "Find the Jordan Point Lane at . ";
    image = "https://static.nike.com/a/images/t_default/f105dd55-53d0-4a50-b43a-55bd9231c658/jordan-point-lane-mens-shoes-PPMHdC.png";
    selection =     {
        count = 1;
        size = "";
    };
    title = "Jordan Point Lane Men's Shoes";
}
)
])

Error fatal: '¡inténtalo!' expresión generó inesperadamente un error: Swift.DecodingError.typeMismatch(Swift.Array, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "cart", intValue: nil),

_FirestoreKey(stringValue: "Índice 0", intValue: 0), CodingKeys(stringValue: "selección", intValue: nil)], debugDescription: "No es una matriz", subyacenteError: nil))

Error fatal: '¡inténtalo!' expresión generó inesperadamente un error: Swift.DecodingError.typeMismatch(Swift.Array, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "cart", intValue: nil), _FirestoreKey(stringValue: "Index 0", intValue: 0 ), CodingKeys(stringValue: "selección", intValue: nil)], debugDescription: "No es una matriz", subyacenteError: nil))

Answer

Como dice el error, selectionno es una matriz en el documento de Firestore, pero la ha definido como una en su modelo.

cambiar let selection: [UserSelection]alet selection: UserSelection