SWIFT - Неполадка «массирующий» снимок, возвращаемый из addSnapshotListener - PullRequest
0 голосов
/ 13 февраля 2019

Первый официальный вопрос о StackOverflow!

Впервые в iOS, Swift и Firestore, поэтому, пожалуйста, прости мое невежество.Я пытаюсь получить словарь из возвращенного снимка из .addSnapshotListener, но с трудом заставляю его сотрудничать.Вот некоторый контекст: я делаю учебник по клону Intstagram, который использует Firebase, но я хотел вместо этого использовать Firestore.

Instagram Post DataModel

struct Post {
let imageUrl: String

init(dictionary: [String : Any]) {
    self.imageUrl = dictionary["imageUrl"] as? String ?? ""

}

и моя функция fetchPost (), которая работает для извлечения изображений из Firestore и загрузки их в мой homeFeed

fileprivate func fetchPosts() {
    guard let uid = Auth.auth().currentUser?.uid else { return }
    Firestore.firestore()
        .collection("users")
        .document(uid)
        .collection("posts")
        .getDocuments { (snapshot, err) in
        if let err = err {
            print("Failed to get posts from user:", err)
            return
        }
        guard let snapshot = snapshot else { return }
        snapshot.documents.forEach({ (data) in
            let dictionary = data.data() as [String : Any]
            let post = Post(dictionary: dictionary)
            self.posts.append(post)
        })
        self.collectionView.reloadData()
    }
}

но вот моя проблема

var posts = [Post]()

fileprivate func fetchOrderedPosts() {
    guard let uid = Auth.auth().currentUser?.uid else { return }
    Firestore.firestore()
        .collection("users")
        .document(uid)
        .collection("posts")
        .order(by: "creationDate", descending: true)
        .addSnapshotListener { (snapshot, err) in
            if let err = err {
                print("Failed to get posts from user:", err)
                return
            }

            guard let dictionary = snapshot?.documents else { return }
            print(dictionary)//*** prints array of documents
            let post = Post(dictionary: dictionary)//*** GIVES ERROR: Cannot convert value of type '[QueryDocumentSnapshot]' to expected argument type '[String : Any]'
            self.posts.append(post)
            self.collectionView.reloadData()
    }

}

Мне нужно сделать ту же функцию, что и fetchPost (), но прослушать изменения, а затем обновить словарь безпродублируйте сообщения, затем перезагрузите collectionView для немедленного отображения нового сообщения.

Любые предложения будут удивительными!

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