Swiftui 如何访问类中的全局环境对象?
我有一个类需要更新全局环境对象。我可以整天在结构之间传递环境对象,但是如何允许类对象访问同一个变量呢Swiftui 如何访问类中的全局环境对象?,swiftui,environmentobject,Swiftui,Environmentobject,我有一个类需要更新全局环境对象。我可以整天在结构之间传递环境对象,但是如何允许类对象访问同一个变量呢 import SwiftUI class Global: ObservableObject { @Published var num = 10 } class MyClass:ObservableObject { @Published var mode = 1 @EnvironmentObject var global: Global func update
import SwiftUI
class Global: ObservableObject
{
@Published var num = 10
}
class MyClass:ObservableObject
{
@Published var mode = 1
@EnvironmentObject var global: Global
func updateMode()
{
self.mode += 1
global.num += 1
}
}
@main
struct MyApp: App
{
let settings = Global()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(settings)
}
}
}
struct ContentView: View
{
@EnvironmentObject var global: Global
@ObservedObject var myClass = MyClass()
var body: some View
{
VStack
{
Text("Setting \(global.num)")
Text("Mode \(myClass.mode)")
Button("Click Me", action: {myClass.updateMode()})
}
.padding()
}
}
以下代码给出了一个错误:
致命错误:未找到全局类型的ObservableObject。A.
全局的View.environmentObject(:)可能缺少的祖先
这是一种观点
我可以将全局对象传递到myClass.updateMode中,但是在这一点上它看起来不是很全局?我认为一定有更好的方法。一种可能的方法是将其共享(并且不要在SwiftUI视图之外的任何地方使用
@EnvironmentObject
)-它不是为此而设计的):
类全局:ObservableObject
{
静态let shared=Global()
@已发布变量num=10
}
类MyClass:ObservableObject
{
@已发布的var模式=1
让global=global.shared/一种可能的方法是使其共享(并且不要在SwiftUI视图之外的任何地方使用@EnvironmentObject
-它不是为此而设计的):
类全局:ObservableObject
{
静态let shared=Global()
@已发布变量num=10
}
类MyClass:ObservableObject
{
@已发布的var模式=1
let global=global.shared//谢谢。这已经成为我最喜欢的转到解决方案之一。请注意,您需要绑定到@Published值,如:$settings.num
谢谢。这已经成为我最喜欢的转到解决方案之一。请注意,您需要绑定到@Published值,如:$settings.num
class Global: ObservableObject
{
static let shared = Global()
@Published var num = 10
}
class MyClass:ObservableObject
{
@Published var mode = 1
let global = Global.shared // << here !!
// ...
}
@main
struct MyApp: App
{
@StateObject var settings = Global.shared // << same !!
// ...
}