SwiftUI @EnvironmentObject:未找到?

Posted

技术标签:

【中文标题】SwiftUI @EnvironmentObject:未找到?【英文标题】:SwiftUI @EnvironmentObject: Not Found? 【发布时间】: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)))
    

提前感谢您的帮助。

【问题讨论】:

【参考方案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)
)

希望对你有帮助!

【讨论】:

以上是关于SwiftUI @EnvironmentObject:未找到?的主要内容,如果未能解决你的问题,请参考以下文章

ObjectBinding 和 EnvironmentObject 有啥区别?

SwiftUI - SwiftUI 中是不是有等效的 popViewController?

swiftui 请求 渲染数据

SwiftUI 学习曲线

SwiftUI NavigationLink 如何到达另一个 SwiftUI 页面?

SwiftUI - 如何在 SwiftUI 中弹出到特定视图?