【发布时间】:2020-03-16 23:00:45
【问题描述】:
我需要打开一个名为 RequestDetails 的视图。
有两种情况可以打开这个视图。
提供数据以打开此请求
提供对 Firestore 文档的引用
在这种情况下,我没有此特定请求的所有详细信息,但我只是参考了 Firestore 文档。我正在使用此引用在此视图出现后立即进行查询并获取有关此请求的详细信息RequestDetail(reference: reference)
class RequestViewModel: ObservableObject {
@Published var request: RequestModel?
@Published var requestReference: DocumentReference?
init(request: RequestModel? = nil, requestReference: DocumentReference? = nil) {
self.request = request
self.requestReference = requestReference
}
func loadRequest() {
FirestoreService().fetchDocument(documentReference: self.requestReference) { (request: RequestModel) in
DispatchQueue.main.async {
self.request = request
}
}
}
}
struct RequestDetails: View {
@State var reference: DocumentReference?
@State var request: RequestModel?
@ObservedObject var vm: RequestViewModel
var body: some View {
VStack {
if request != nil {
Text(self.request?.senderFirstName)
}
}.onAppear {
if self.vm.package == nil {
self.vm.loadRequest()
}
}
}
}
struct Home: View {
var request: RequestModel
var reference: DocumentReference
var body: some View {
VStack {
RequestDetail(request: request)
RequestDetail(reference: reference)
}
}
}
问题是我遇到了很多错误,我想知道背后的逻辑是否正常。我是否以正确的方式使用视图模型模式?
【问题讨论】:
标签: ios swift mvvm swiftui swift5