首页 > 解决方案 > Swift 检测视图中另一个视图对变量的更改

问题描述

我有以下课程

class GettingData: ObservableObject {

var doneGettingData = false
    
        {
        didSet {
            if doneGettingData {
                print("The instance property doneGettingData is now true.")
            } else {
                print("The instance property doneGettingData is now false.")
            }

        }
    }
}

我正在更新 mapView 结构中的变量 doneGettingData,然后我将在我的主视图 (contentView) 中使用该结构。这个变量在地图加载时从 false / true 改变,我可以从我在课堂上使用的打印中检测到它,所以我知道它正在改变。我想用它来触发 ContentView 中的微调器,其中我有以下代码:

import SwiftUI
import Combine

struct ContentView: View {
   
var done = GettingData().doneGettingData

 var body: some View {
        
        VStack {
            MapView().edgesIgnoringSafeArea(.top)
            Spacer()
            Spinner(isAnimating: done, style: .large, color: .red)
            
    }
}



struct Spinner: UIViewRepresentable {
    let isAnimating: Bool
    let style: UIActivityIndicatorView.Style
    let color: UIColor
    
    func makeUIView(context: UIViewRepresentableContext<Spinner>) -> UIActivityIndicatorView {
        let spinner = UIActivityIndicatorView(style: style)
        spinner.hidesWhenStopped = true
        spinner.color = color
        return spinner
    }
    
    func updateUIView(_ uiView: UIActivityIndicatorView, context: UIViewRepresentableContext<Spinner>) {
        isAnimating ? uiView.startAnimating() : uiView.stopAnimating()
    }
}



struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

我应该怎么做才能使变量随着打印而变化但在视图内部发生变化?我尝试了很多选择,但没有任何效果!谢谢

标签: swiftui

解决方案


发布您的资源

class GettingData: ObservableObject {
  @Published var doneGettingData = false
}

然后观察数据并将该实例传递MapView给使用,因此在内部修改该属性

struct ContentView: View {
   
   @ObservedObject var model = GettingData()

   var body: some View {
        VStack {
            MapView(dataGetter: model).edgesIgnoringSafeArea(.top)
            Spacer()
            Spinner(isAnimating: model.doneGettingData, style: .large, color: .red)
            
    }
}

推荐阅读