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的主要内容,如果未能解决你的问题,请参考以下文章

Swift:SwiftUI中MapKit的使用体验

SwiftUI:如何在 MapKit 中自定义地理区域的位置?

使用 SwiftUI 和 MapKit 检索用户当前位置

你能从 SwiftUI 中的 MapKit 数据库中获取纬度和经度吗

SwiftUI MapKit UIViewRepresentable 无法显示警报

在 swiftUI 2 中向 MapKit 添加 MapMarker