Пользовательская модель с Firestore - PullRequest
0 голосов
/ 07 октября 2019

У меня есть модель, подобная этой ниже

struct Package {
    var driverID: String;

    init(data: [String: Any]) {
        self.driverID = data["driverID"] as? String ?? ""
    }

}

Я хочу использовать ее в качестве модели для сопоставления ответа с массивом Packages Мой запрос такой:

db.collection("packages").getDocuments() { (querySnapshot, err) in
    if let snapshot = querySnapshot {

        var packages = querySnapshot.flatMap({ (document) in
            return Package(data: document)
        })
    }
}

Проблема в том, что я получаю сообщение об ошибке: Cannot convert value of type '([String : Any]) -> Package' to expected argument type '(_) -> _?'

Что я здесь не так делаю?

Ответы [ 2 ]

1 голос
/ 07 октября 2019

flatMap устарело и заменено на compactMap. Используйте это так:

db.collection("packages").getDocuments() { (querySnapshot, err) in
    if let snapshot = querySnapshot {
        var packages = snapshot.documents.compactMap { (document) in
            return Package(data: document.data())
        }
    }
}
0 голосов
/ 07 октября 2019

Я вижу два неправильных места. Во-первых, чтобы получить документы снимка, вы должны использовать snapshot.documents. Во-вторых, чтобы получить данные документа, вы должны использовать document.data(). Фрагмент кода на официальном сайте объясняет все в этой операции. Пожалуйста, попробуйте следующий код и выполните отладку соответственно.

db.collection("packages").getDocuments() { (querySnapshot, err) in
    if let snapshot = querySnapshot {

        var packages = snapshot.documents.compactMap({ (document) in
            return Package(data: document.data())
        })
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...