swift - 有没有办法在 SwiftUI 视图和与之间接相关的类之间有一个全局变量?
问题描述
我正在开发一个 MacOS Swift 项目(使用 SwiftUI),并且在发生事件时无法更新文本标签。
struct ContentView: View {
@State var now = globalString.stringy
var body: some View {
VStack {
Text(now)
.frame(maxWidth: .infinity, maxHeight: .infinity)
}.onAppear {
k.start()
}
}
}
struct globalString {
static var stringy = ""
static var temperature = 0.0
}
上面的变量now
指的是程序运行时正在更改的结构中的全局变量(在此代码中未引用的不同类中),但对变量的更改不会显示在文本标签中。
如何创建一个在该视图和该类之间共享的变量,同时在变量发生更改时仍让我的视图更新?对变量所做的更改位于单独的文件中。
我尝试使用可观察对象和环境对象,但似乎都不起作用。
如果有人可以提供帮助,我将不胜感激。谢谢!
解决方案
要在 SwiftUI 视图中进行更改,因为它是一个静态元素,因为它的结构声明,你的对象 GlobalString 必须符合 StateObject 才能对视图进行实时更改,并且它的变量必须符合 @Published .
class GlobalString: ObservableObject {
@Published var stringy = ""
@Published var temperature = 0.0
}
struct ContentView: View {
@StateObject var globalString = GlobalString()
var body: some View {
VStack {
Text(globalString.stringy)
.frame(maxWidth: .infinity, maxHeight: .infinity)
}.onAppear {
k.start()
}
}
}
推荐阅读
- hadoop - 辅助名称节点无法启动 ssh:连接到主机 0.0.0.7 端口 22:连接超时
- java - API 30 中的透明状态栏
- .net - 获取 IISAppPool | .NET 中的选择对象状态为空
- date - 具有短时区 ID 的 hive 时区转换
- sql - 两个选择结果的计算(乘法)
- html - 创建一个jQuery函数
- business-objects - 匹配 2 个值?
- c# - WiX CustomAction 的子进程忽略 -Verb runAs
- invoice-ninja - 慢速 WAN 接口 - 302/404 问题?
- javascript - MongoDb:如何将 Group by 的总计数作为平面计数而不是数组?