【问题标题】:SwiftUI @EnvironmentObject: Not Found?SwiftUI @EnvironmentObject:未找到?
【发布时间】:2021-01-02 16:06:57
【问题描述】:

我有一个结构,我想将其转换为 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)))
    }
}

提前感谢您的帮助。

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    目前,您正在为预览设置环境对象,但您还需要在上面使用checklistDisplayRow的层次结构中设置它。

    例如,如果您在 VStack 中使用了几个 checklistDisplayRows(用于事件清单中的项目),您可以执行以下操作:

    VStack {
        ForEach(checklist, id: \.id) { item in
            checklistDisplayRow(itemID: item.id)
        }
    }.environmentObject(
        event("Title", 1, Date(timeIntervalSince1970: 1576800000), Date(timeIntervalSince1970: 1576800060)
    )
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-06
      • 2021-10-30
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多