是否可以在SwiftUI中创建一个全局@State变量,可以在多个Swift UI文件之间进行访问?
我已经研究了@EnvironmentObject变量,但似乎无法使它们执行我希望它们执行的操作。
答案 0 :(得分:1)
从Beta 3开始,您无法创建顶级全局@State
变量。编译器将出现段错误。您可以将一个放置在结构中并创建该结构的实例以进行构建。但是,如果实际实例化,则会出现类似Accessing State<Bool> outside View.body
的运行时错误。
可能您正在寻找一种简便的方法来创建对BindableObject
上属性的绑定。 this gist中有一个很好的例子。
可以为全局变量创建一个Binding
,但不幸的是,这仍然无法满足您的要求。该值将更新,但您的视图将不会刷新(下面的代码示例)。
以编程方式创建Binding
的示例:
var globalBool: Bool = false {
didSet {
// This will get called
NSLog("Did Set" + globalBool.description)
}
}
struct GlobalUser : View {
@Binding var bool: Bool
var body: some View {
VStack {
Text("State: \(self.bool.description)") // This will never update
Button("Toggle") { self.bool.toggle() }
}
}
}
...
static var previews: some View {
GlobalUser(bool: Binding<Bool>(getValue: { globalBool }, setValue: { globalBool = $0 }))
}
...