首页 > 解决方案 > 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)") 仅用于测试建议 - 它一直是错误的,尽管我确实看到它随着打印而改变! 在此处输入图像描述

我应该如何解决这个问题?我错过了一些东西,请问有什么建议吗?谢谢

标签: swiftuimapkit

解决方案


没有看到所有代码和使用位置,但看起来最适合将该全局变量包装到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)")
        }
    }
}

推荐阅读