【发布时间】:2021-03-26 11:02:11
【问题描述】:
swiftui 和 firestore 的新手,在调用此文档数组时遇到了困难。希望有人可以帮助我将“items”数组调用到VStack中。
添加了我一直在尝试的代码
查看模型
import SwiftUI
import FirebaseFirestore
class MovieItemViewModel: ObservableObject {
@Published var movieItems = [MovieItem]()
private var db = Firestore.firestore()
func fetchData() {
db.collection("movies").order(by: "items").addSnapshotListener { (querySnapshot, error) in
guard let documents = querySnapshot?.documents else {
print("No Documents")
return
}
self.movieItems = documents.map { (queryDocumentSnapshot) -> MovieItem in
let data = queryDocumentSnapshot.data()
let items = data["items"] as? String ?? ""
return MovieItem(item: items)
}
}
}
}
型号
import SwiftUI
struct MovieItem: Identifiable {
var id: String = UUID().uuidString
var item: String
}
主视图
struct MovieDetailListView: View {
@ObservedObject private var viewModel = MovieItemViewModel()
var body: some View {
VStack(alignment: .leading, spacing: 15){
ForEach(viewModel.movieItems.indices, id: \.self) { i in
Text(viewModel.movieItems[i].item)
}
}
.onAppear() { self.viewModel.fetchData() }
}
}
【问题讨论】:
-
发布您尝试过的代码
-
@Cod3rMax 根据我在网上找到的 YT 视频和答案,我添加了我一直在搞乱的代码。
-
在当前状态下,在 ForEach 文本上我得到
Value of type 'MovieItem' has no member 'name',在视图模型中返回时我得到Argument passed to call that takes no arguments -
请检查您的物业名称! 1.你的
viewModelMovieItemViewModel没有属性items所以你不能做ForEach(viewModel.items.…。你叫它movieItems,所以ForEach(viewModel.movieItems.…? 2.你的MovieItem没有name的属性,所以你不能做Text(viewModel.items[i].name)。 -
@grg 感谢您提出这些意见。我做了一些编辑(我已经编辑了上面的代码)。我不再收到任何错误,但它仍然没有调用任何数据,我在 onAppear 中尝试过
print(self.viewModel.fetchData()),但控制台只是打印“()”
标签: swift firebase google-cloud-firestore swiftui