SwiftUi - 为 MapKit 构建一个 Spinner
Posted
技术标签:
【中文标题】SwiftUi - 为 MapKit 构建一个 Spinner【英文标题】:SwiftUi - Build a Spinner for MapKit 【发布时间】:2020-09-06 08:56:05 【问题描述】:我有一个 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)")
仅用于测试建议 - 尽管我确实看到它随着打印而改变,但它一直都是错误的!
我应该如何解决这个问题?我错过了一些东西,请问有什么建议吗? 谢谢
【问题讨论】:
【参考方案1】:没有看到所有代码和使用位置,但看起来最适合将该全局变量包装到 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)")
【讨论】:
你好@Asperi。谢谢你。我已经完成了您的建议,并且变量在 print 语句中按预期更改,但在 ContentView.swift 中没有。我有以下内容:' import SwiftUI import Combine struct ContentView: View @ObservedObject var vm = GettingData() var body: some View VStack Text("Did it change = (vm.doneGettingData.description)") ' 而且它不会改变! 您在 MapKit 中更改了哪一项?我写了关于shared
的内容?仔细查看我的答案代码。
我至少根据我的解释做了你所说的,所以我创建了类而不是添加到 MapView 的更改,以便变量在正确的时间更新( self.shared.doneGettingData = true ) 我添加只是为了尝试 demoView 并且打印正在更改但视图一直是错误的。在演示视图中我有(@ObservedObject var vm = GettingData()) - 所以也许我没有正确解释你的答案?以上是关于SwiftUi - 为 MapKit 构建一个 Spinner的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:如何在 MapKit 中自定义地理区域的位置?
你能从 SwiftUI 中的 MapKit 数据库中获取纬度和经度吗