Swiftui 如何从类而不是视图更改@EnvironmentObject
我有一个选项卡视图,它有两个子视图——PageOneView和PageTwoView。我还有一个@EnvironmentObject数据在SceneDelegate中初始化。PageOneView和PageTwoView中的每一个都有一个嵌套的子级。对于PageTwoView,嵌套的子视图也是一个视图,在其中我可以访问和修改@EnvironmentObject,并且所有顶级视图(PageOneView和PageTwoView)都反映了更改。但是对于PageOneView,嵌套的子对象是一个类,而不是一个视图,当我试图在PageOneView的子对象中修改它时,我得到一个错误:线程1:致命错误:找不到类型为Data的ObservableObject。数据的View.environmentObject(:)可能作为此视图的祖先丢失。有没有办法从嵌套子对象中更改@EnvironmentObject,该嵌套子对象不是视图,而是类Swiftui 如何从类而不是视图更改@EnvironmentObject,swiftui,environmentobject,Swiftui,Environmentobject,我有一个选项卡视图,它有两个子视图——PageOneView和PageTwoView。我还有一个@EnvironmentObject数据在SceneDelegate中初始化。PageOneView和PageTwoView中的每一个都有一个嵌套的子级。对于PageTwoView,嵌套的子视图也是一个视图,在其中我可以访问和修改@EnvironmentObject,并且所有顶级视图(PageOneView和PageTwoView)都反映了更改。但是对于PageOneView,嵌套的子对象是一个类,而
struct AppView: View {
@EnvironmentObject var data: Data
var body: some View {
TabView {
PageOneView().environmentObject(data)
.tabItem {
Text("PageOne")
}
PageTwoView().environmentObject(data)
.tabItem {
Text("PageTwo")
}
}
}
}
struct PageTwoView: View {
@EnvironmentObject var data: Data
var body: some View {
VStack {
Text("Data: \(data.Name)")
ChildView()//.environmentObject(data)
}
}
}
struct ChildView: View {
@EnvironmentObject var data: Data
var body: some View {
VStack {
Text("Data: \(data.Name)")
Button(action: {
self.updateData()
}) {
Text("Update Data")
}
}
}
func updateData()
{
self.data.Name = "Updated Name"
}
}
struct PageOneView: View {
@EnvironmentObject var data: Data
var body: some View {
VStack {
Text("Data: \(data.Name)")
Button(action: {
self.updateData()
}) {
Text("Update Data")
}
}
}
func updateData()
{
var child = Child()
child.updateData()
}
}
class Child: NSObject{
@EnvironmentObject var data: Data
func updateData()
{
data.Name = "Updated Name Again"
}
}
这里是更正的部分(您不需要类中的@EnvironmentObject
包装器,它是为查看而设计的,您的数据
本身就是一个类,所以您可以通过引用将其实例传递给您的子类
)
这里是更正的部分(您不需要类中的@EnvironmentObject
包装器,它是为查看而设计的,您的数据
本身就是一个类,所以您可以通过引用将其实例传递给您的子类
)
Asperi,你能看看这个关于传递EnvironmentObject的问题吗?TIA Asperi,你能看看这个关于传递EnvironmentObject的问题吗?短暂性脑缺血发作
func updateData()
{
var child = Child(data: self.data)
child.updateData()
}
}
class Child: NSObject{
let data: Data
init(data: Data) {
self.data = data
}
func updateData()
{
data.Name = "Updated Name Again"
}
}