【发布时间】:2023-01-10 12:34:26
【问题描述】:
我打电话给 Firestore 获取一些数据并存储到
@published var userJournals
在另一个视图中,我去调用变量,它是空的。我检查了从 firestore 初始提取的数据,数据显示并成功映射。想知道我在另一种观点上做错了什么。
视图 1
class JournalDashLogic: ObservableObject { @Published var userJournals = [UserJournalEntry]() @Published var userJournalIDs = [String]() func grabUserJournals(journalID: String){ //grab current user guard let uid = FirebaseManager.shared.auth.currentUser?.uid else { return } FirebaseManager.shared.firestore .collection("users") .document(uid) .collection("userJournalEntrys") .document(journalID) .collection("items") .addSnapshotListener { (snapshot, err) in guard let documents = snapshot?.documents else{ print("no documents present") return } //map to journal entry struct self.userJournals = documents.map { (querySnapshot) -> UserJournalEntry in let data = querySnapshot.data() let dateCreated = data ["dateCreated"] as? String ?? "" let dayOfWeek = data ["dayOfWeek"] as? String ?? "" let mealCalories = data ["mealCalories"] as? Int ?? 0 let mealCarbs = data ["mealCarbs"] as? Int ?? 0 let mealFat = data ["mealFat"] as? Int ?? 0 let mealName = data ["mealName"] as? String ?? "" let mealProtein = data ["mealProtein"] as? Int ?? 0 let MealServing = data ["MealServing"] as? Int ?? 0 let mealSaved = data ["saved"] as? Bool ?? false let mealTiming = data ["timeCreated"] as? String ?? "" let entry = UserJournalEntry(id: UUID().uuidString, mealName: mealName, mealFat: mealFat, mealCarbs: mealCarbs, mealProtein: mealProtein, mealCalories: mealCalories, MealServing: MealServing, mealSaved: mealSaved, mealTiming: mealTiming, dayOfWeek: dayOfWeek, totalCalories: "100", dateCreated: dateCreated) return entry } }视图 2
.onAppear { for id in jm.userJournalIDs { jm.grabUserJournals(journalID: id) } }从视图 2 呈现的工作表
.sheet(isPresented: $showAllJournals){ SavedJournalsList(savedJournalIDs: jm.userJournalIDs, savedJournals: jm.userJournals) .transition(transition) }视图 3
struct SavedJournalsList: View { @State var savedJournalIDs: [String] @State var savedJournals: [UserJournalEntry] var body: some View { VStack (alignment: .leading){ ForEach(savedJournals, id: \.self) { entry in HStack{ Text(entry.dateCreated).bold() Text("Total Calories: 3200") .padding(.leading, 15) } .frame(maxWidth: .infinity) .multilineTextAlignment(.center) HStack{ Text("200 Carbs") .foregroundColor(.gray) Text("250 Protein") .foregroundColor(.gray) Text("100 Fat") .foregroundColor(.gray) } .padding(.all, 5) .frame(maxWidth: .infinity) } .frame(width: 300, height: 100) .background(.white) .cornerRadius(15) .shadow(color: Color("LighterGray"), radius: 5, x: 0, y: 8) } } }
【问题讨论】:
-
Wondering what I'm doing wrong on the other view.。如何显示 View1 和 View2 的代码,如何声明它们以及如何在它们之间传递JournalDashLogic。请注意,您可能应该使用@StateObject var jm = JournalDashLogic()。请注意,在您的代码中,您设置了userJournals,而不是您在 view2 中使用的userJournalIDs。 -
@workingdogsupportUkraine 已更新以包含更多信息。谢谢!
标签: swift firebase google-cloud-firestore swiftui