Как я могу получить идентификатор документа firestore в общем методе c? - PullRequest
1 голос
/ 22 января 2020

Я новичок в Swift и пытаюсь внедрить метод generi c для извлечения данных из Firestore.

func fetch<T: Codable>(query: Query, completion:@escaping (Result<[T]?, Swift.Error>) -> Void) {

    var dataArray = [T]()

    query.addSnapshotListener { (querySnapshot, error) in

        guard let snapshot = querySnapshot else {
            print("Error fetching snapshots: \(error!)")
            completion(.failure(error!))
            return
        }

        if snapshot.isEmpty {

            completion(.success(nil))
            return
        }

        snapshot.documentChanges.forEach { change in

            var data: T!

            do {
                data = try FirestoreDecoder().decode(T.self, from: change.document.data())

            } catch let error {
                completion(.failure(error))
                return
            }

            if (change.type == .added) {
                //                    print("New data: \(change.document.data())")
                dataArray.append(data)
            }
        }

        completion(.success(dataArray))

    }

, но здесь я не знаю, как мне получить идентификатор документа от изменения .document.data (). Пожалуйста, помогите мне, если кто-нибудь знает. спасибо.

1 Ответ

1 голос
/ 22 января 2020

Может быть, эти ссылки могут помочь https://firebase.google.com/docs/reference/swift/firebasefirestore/api/reference/Classes/DocumentChange

https://firebase.google.com/docs/reference/swift/firebasefirestore/api/reference/Classes/QueryDocumentSnapshot

У вас есть свойство newIndex при изменении типа UInt или вы может распечатать содержимое change.document.data () и посмотреть, есть ли поле с именем, соответствующим идентификатору. Метод data содержит значения документа на вашей консоли Firestore.

Затем вы можете получить доступ к элементу словаря следующим образом:

change.document().data()["id"] as? Int
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...