如何解决Instagram教程SwiftUI Firebase无法加载时间轴
我是编码的新手,一直在尝试通过instagram教程来理解一些概念。自更新为Xcode 12之后,我的Firebase似乎不再可用,也没有显示在家庭供稿上。 我放了一个矩形,看是否是!homeViewModel.isLoading是否是它的原因。
这是我当前的代码:
import SwiftUI
import URLImage
import Firebase
struct HomeView: View {
@ObservedObject var homeViewModel = HomeViewModel()
var body: some View {
NavigationView {
ScrollView(.vertical,showsIndicators: false) {
Story()
Rectangle().frame(width: 200,height: 200).foregroundColor(.red)
if !homeViewModel.isLoading {
ForEach(self.homeViewModel.posts,id: \.postId) { post in
VStack(alignment: .center) {
HeaderCell(post: post)
FooterCell(post: post)
}.background(Color.white).cornerRadius(10)
.padding(.leading,10).padding(.trailing,10)
}
}
}.background(Color.gray)
HomeViewModel:
import Foundation
import SwiftUI
import Firebase
class HomeViewModel: ObservableObject {
@Published var posts: [Post] = []
@Published var isLoading = false
var listener: ListenerRegistration!
// init() {
// loadTimeline()
// }
func loadTimeline() {
self.posts = []
isLoading = true
Api.Post.loadTimeline(onSuccess: { (posts) in
self.isLoading = false
if self.posts.isEmpty {
self.posts = posts
}
},newPost: { (post) in
if !self.posts.isEmpty {
self.posts.insert(post,at: 0)
}
}) { (listener) in
self.listener = listener
}
}
}
LoadTimeline函数:
func loadTimeline(onSuccess: @escaping(_ posts: [Post]) -> Void,newPost: @escaping(Post) -> Void,listener: @escaping(_ listenerHandle: ListenerRegistration) -> Void) {
guard let userId = Auth.auth().currentUser?.uid else {
return
}
let listenerFirestore = Ref.FIRESTORE_TIMELINE_DOCUMENT_USERID(userId: userId).collection("timelinePosts").order(by: "date",descending: true).addSnapshotListener({ (querySnapshot,error) in
guard let snapshot = querySnapshot else {
return
}
var posts = [Post]()
snapshot.documentChanges.forEach { (documentChange) in
switch documentChange.type {
case .added:
print("type: added")
let dict = documentChange.document.data()
guard let decoderPost = try? Post.init(fromDictionary: dict) else {return}
newPost(decoderPost)
posts.append(decoderPost)
case .modified:
print("type: modified")
case .removed:
print("type: removed")
}
}
onSuccess(posts)
})
listener(listenerFirestore)
}
由于某种原因,似乎该函数没有被触发并且时间轴未加载。不确定为什么...在更新之前,它工作正常吗?
任何帮助将不胜感激!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。