是否可以在 SwiftUI 中创建一个全局 @State 变量,该变量可以跨多个 Swift UI 文件访问?
我已经查看了@EnvironmentObject 变量,但似乎无法让它们做我想让它们做的事情。
从 Beta 3 开始,您无法创建顶级全局@State变量。编译器会出现段错误。您可以将一个放在结构中并创建该结构的实例以进行构建。但是,如果您实际实例化它,您将收到一个运行时错误,例如:Accessing State<Bool> outside View.body。
可能您正在寻找的是一种简单的方法来创建到BindableObject. 在这个 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 }))
}
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5834 次 |
| 最近记录: |