微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUi-为MapKit构建微调器

如何解决SwiftUi-为MapKit构建微调器

我有一个swiftUi视图,该视图显示带有注释的地图(地图中的点),并且我创建了一个布尔变量,当所有注释显示完毕后,该变量将从false变为true。 现在在ContentView中,我有一个Spinner,我想在变量为false时显示,并在其为true时停止。 这个变量是一个全局变量,通过以下测试,我知道它会发生变化

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)") 只是为了测试建议-尽管我确实看到它随着印刷而变化,但它始终都是假的!

enter image description here

我该如何解决?我想念什么,请问任何建议吗? 谢谢

解决方法

看不到所有代码和使用位置,但将全局变量包装到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)")
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。