swiftui - SwiftUi - 为 MapKit 构建微调器
问题描述
我有一个 swiftUi 视图,它显示带有注释的地图(地图中的点),并且我创建了一个布尔变量,当所有注释都显示完毕后,该变量从 false 变为 true。现在在 ContentView 中,我有一个 Spinner,我想在变量为假时显示并在变量为真时停止。这个变量是一个全局变量,通过以下测试我知道它会改变
var doneGettingData : Bool = false {
didSet {
if doneGettingData {
print("The instance property doneGettingData is now true.")
} else {
print("The instance property doneGettingData is now false.")
}
}
}
问题是,如果例如在 ContentView 中,如果我
Text("Did it change = \(doneGettingData.description)")
仅用于测试建议 - 它一直是错误的,尽管我确实看到它随着打印而改变!
我应该如何解决这个问题?我错过了一些东西,请问有什么建议吗?谢谢
解决方案
没有看到所有代码和使用位置,但看起来最适合将该全局变量包装到ObservableObject
类中并在所有需要的位置使用该类的对象(当然是通过引用),并在 SwiftUI 视图中观察到自动刷新,即
class GettingData: ObservableObject {
let shared = GettingData() // << to use in MapKit & in SwiftUI
@Published var doneGettingData : Bool = false {
didSet {
if doneGettingData {
print("The instance property doneGettingData is now true.")
} else {
print("The instance property doneGettingData is now false.")
}
}
}
}
struct DemoView: View {
@ObservedObject var vm = GettingData.shared
var body: some View {
VStack {
Text("Did it change = \(vm.doneGettingData.description)")
}
}
}
推荐阅读
- ios - 为什么 UITapGestureRecognizer 不工作,如果我们让它成为一个类的成员变量?
- sql-server - SQL Server bacpac 导出导入错误 | 数据长度增加
- python - Lavalink 收到无效响应 discord.py
- optimization - 如何在新的 roblox 更新中优化克隆
- task - 雪花无服务器任务
- android - 单击时在按钮中实现 if else
- reactjs - 如何使用反应停止 VSCODE 中的标签分离?
- asp.net - 如何在 .NET 中验证对 Discord 交互 webhook 发出的请求?
- elixir - 如何修复依赖项中的透析器 unknown_function 错误?
- intro.js - 您可以在 Introjs 步骤中添加动态内容吗