【发布时间】:2021-12-26 07:59:28
【问题描述】:
当我呈现 SwiftUI 视图时,我试图从 ObservableObject 类加载数据,但 我收到以下错误代码:“无法在属性初始化程序中使用实例成员 'documentID';属性初始化程序在 'self' 之前运行可用”
数据查询类:
class ItemDataDelegate: ObservableObject {
@Published var serviceContentLoaded = Bool()
@Published var SelectedCategory: String?
@Published var SelectedDocumentID: String?
init(SelectedCategory: String, SelectedDocumentID: String){
self.getSelectedContentData(Category: SelectedCategory, DocumentID: SelectedDocumentID) {
self.getSelectedCompanyData(CUID: ContentData[indexPath.row].CompanyID) {
print("data query completed")
}
}
}
}
这是我在调用和完成之前代码中的数据时想要呈现的视图:
我上面提到的错误显示在@StateObject var itemDataDelegate = ItemDataDelegate(SelectedCategory: selectedCategory, SelectedDocumentID: documentID) 代码行。
struct DetailView: View {
@Binding var documentID: String
@Binding var selectedCategory: String
@StateObject var itemDataDelegate = ItemDataDelegate(SelectedCategory: selectedCategory, SelectedDocumentID: documentID)
@State private var showSheet = false
@Environment(\.presentationMode) var mode: Binding<PresentationMode>
var image: UIImage
var companyName: String
var cartActive: Bool
var body: some View {
return ZStack {
switch itemDataDelegate.serviceContentLoaded {
case true:
ContentView()
case false:
LoadingView()
}
}
.navigationBarHidden(true)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.edgesIgnoringSafeArea(.all)
}
}
【问题讨论】:
-
在父视图中创建对象并注入它。
-
您似乎遇到了stackoverflow thread 中提到的类似问题。可以试试accepted answer中提到的答案吗?
-
@Prabir 是的,您的答案与下面发布的 jnpdx 具有相同的解决方案。也谢谢你!