Первый официальный вопрос о 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 для немедленного отображения нового сообщения.
Любые предложения будут удивительными!