我有一个结构,我想把它转换成一个EnvironmentObject,这样我就可以把它传递给子结构,但是当我这样做的时候,它会因为MissingEnvironmentObjectError: Missing EnvironmentObject而崩溃。我的结构看起来像这样:
class event: ObservableObject {
@Published var Name: String
@Published var CalendarID: Int
var timeStart: Date
var timeEnd: Date
var checklist = [checklistObject]()
init(_ eventName: String, _ calID: Int, _ timeStart: Date, _ timeEnd: Date) {
Name = eventName
CalendarID = calID
self.timeStart = timeStart
self.timeEnd = timeEnd
logger.log("Successfully created new event")
}
func newChecklistItem(Content: String){
checklist.append(checklistObject(Content, false))
}
func getChecklistSize() -> Int {
return checklist.count
}
}我的程序看起来像这样:
import SwiftUI
struct checklistDisplayRow: View {
@EnvironmentObject var Event: event
var itemID: Int
init(itemID: Int){
self.itemID = itemID
Event.newChecklistItem(Content: "Stuff")
}
var body: some View {
HStack{
Toggle("", isOn: $Event.checklist[itemID].complete)
Text("hi")
}
}
}
struct checklistDisplayRow_Previews: PreviewProvider {
static var previews: some View {
checklistDisplayRow(itemID: 0)
.environmentObject(event("Title", 1, Date(timeIntervalSince1970: 1576800000), Date(timeIntervalSince1970: 1576800060)))
}
}提前感谢您的帮助。
发布于 2021-01-03 18:18:18
此时,您正在为预览设置环境对象,但您还需要在使用checklistDisplayRow的层次结构中设置它。
例如,如果您在VStack中使用一些checklistDisplayRow(对于事件检查表中的项),您可以这样做:
VStack {
ForEach(checklist, id: \.id) { item in
checklistDisplayRow(itemID: item.id)
}
}.environmentObject(
event("Title", 1, Date(timeIntervalSince1970: 1576800000), Date(timeIntervalSince1970: 1576800060)
)我希望这对你有帮助!
https://stackoverflow.com/questions/65541221
复制相似问题