Правильный способ вставить / обновить Codable struct document / array в Firestore - PullRequest
1 голос
/ 25 марта 2020

Моя структура документа Firestore, я создал ее через Android:

--- Document
----- testA (object)
----- testB (array)
------- 0: Device item 1
------- 1: Device item 2

У меня есть следующая структура:

import Foundation
public struct Device: Codable {
    var manufacturer: String?
    var model: String?
    var osVersion: String?

    enum CodingKeys: String, CodingKey {
        case manufacturer
        case model
        case osVersion
    }
}

Мой объект устройства

let currentDevice = Device(manufacturer: "a", model: "b", osVersion: "c")

Тест A: обновить Device до документа. Я попробовал следующий код:

db.collection("testCollection").document("testDoc").updateData([testA: currentDevice])
...

Тест B: добавьте Device к testB массиву.

db.collection("testCollection").document("testDoc")
.updateData([testA: FieldValue.arrayUnion([currentDevice])])

Все это вызывает ошибку ниже: Terminating app due to uncaught exception 'FIRInvalidArgumentException', reason: 'Unsupported type: __SwiftValue'

Я также проверил официальный документ, но он не показывает, как обновить объект структуры до Firestore. Что я могу сделать? Спасибо.

1 Ответ

0 голосов
/ 25 марта 2020

Обычно эта ошибка связана с тем, что Firestore не может сериализовать различные типы переменных и массивов одновременно - в вашем случае проблема кажется связанной с переменной currentDevice, которую Firestore не может для идентификации.

Похоже, что вам потребуется изменить приведенную ниже часть, чтобы ваше приложение могло вставлять данные.

...  
enum CodingKeys: String, CodingKey {
            case manufacturer
            case model
            case osVersion
        }
...

Поскольку вы не используете одну "переменную" добавить информацию для manufacturer, model и osVersion. Я бы порекомендовал вам проверить этот вопрос в Сообществе здесь , чтобы получить возможное решение - адаптирующееся к вашему случаю - как преобразовать ваши данные для Firestore, чтобы иметь возможность понять.

Дайте мне знать, помогла ли вам эта информация!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...