我的数据包含在一个名为selectedFolderId
的变量中,其目的是希望将此变量中的数据传递到一个类中,以便在加载ShoppingListItemsView
时随时从FireStore读取数据库的内容。
如果任何人能解释并向我展示如何将这些数据从我的ShoppingListItemsView
传递到我的ListRepository
类中,我将在其中进一步使用这些数据进行查询,我将非常感激。
下面是ShoppingListItemsView
和ListRepository
类:
import SwiftUI
import November
struct ShoppingListItemsView: View {
@ObservedObject var taskListVM = ShoppingListItemsViewModel()
@EnvironmentObject var sessionService: SessionServiceImpl
@EnvironmentObject var searchBarModel: SearchBarModel
@ObservedObject var folderListVM = FolderListViewModel()
@ObservedObject var listRepository = ListRepository()
let tasks = testDataTasks
var selectedFolderTitle = ""
var selectedFolderDate = ""
var selectedFolderId = ""
@State var presentANewItem = false
var body: some View {
VStack {
List{
ForEach(taskListVM.taskCellViewModels){ taskCellVM in
TaskCell(taskCellVM: taskCellVM)
}
if(presentANewItem == true){
TaskCell(taskCellVM: ShoppingListItemCellViewModel(task: ListItem(listTitle: "", completed: false, selectedFolderId: selectedFolderId))) { task in
self.taskListVM.addTask(task: task)
self.presentANewItem.toggle()
}
}
}
// .onAppear {
// // Set the default to clear
// UITableView.appearance().backgroundColor = .clear
// }
Button (action: { self.presentANewItem.toggle() }, label : {
HStack{
Image(systemName: "plus.circle.fill")
.resizable()
.frame(width: 20, height: 20)
.foregroundColor(.white)
Text("Add New Item")
.foregroundColor(.white)
.font(.system(size: 15.0))
.fontWeight(.bold)
}
.padding(3)
.background(Color.cartvoltDarkBlue)
.cornerRadius(10)
.shadow(color: Color.cartvoltDarkBlue.opacity(0.9), radius: 5, x: 5, y: 5)
})
.padding(.bottom)
}
.onAppear{
}
.navigationTitle("(selectedFolderTitle) • (selectedFolderDate)")
.navigationBarTitleDisplayMode(.inline)
}
}
import Foundation
import Firebase
import FirebaseFirestore
import FirebaseFirestoreSwift
class ListRepository: ObservableObject {
let db = Firestore.firestore()
@Published var tasks = [ListItem]()
@Published var selectedFolderId = ""
init(){
loadData()
}
func loadData() {
let userId = Auth.auth().currentUser?.uid
db.collection("listItems")
.order(by: "createdTime")
.whereField("userId", isEqualTo: userId)
.addSnapshotListener { (querySnapshot, error) in
if let querySnapshot = querySnapshot {
self.tasks = querySnapshot.documents.compactMap { document in
do {
let x = try document.data(as: ListItem.self)
return x
}
catch {
print(error)
}
return nil
}
}
}
}
}
您可以看到onAppear{}
加载时,我希望将ShoppingListItemsView
中selectedFolderId
变量中包含的数据移动到ListRepository
类中的selectedFolderId
变量中,稍后我将在查询中使用它。
如果有人能帮我解决这个问题,那就太好了
1条答案
按热度按时间qnzebej01#
嗨,Emere,欢迎来到So。要获得快速和高质量的答案,请阅读本文Minimal reproducible example
无论如何,您的案例看起来并不困难,您可以通过在
ListRepository
中创建一个func
来实现您的目标,该func
将接受ShoppingListItemsView
中的参数并重写selectedFolderId
。当您想要设置新的selectedFolderId
时,可以随时从您的视图调用该函数。将此函数添加到
ListRepository
:将此修改添加到View中,当您点击项目并将新值传递到函数时,该修改将更改
selectedFolderIs
。