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
中使用了几个 checklistDisplayRow
s(用于事件清单中的项目),您可以执行以下操作:
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?