如何在 swift 中实现观察者

How to implement observer in swift

我有以下项目,它在 swift 中实现了一个观察者,以便在两个视图之间传递数据。

型号

import Foundation

class ModelData : ObservableObject {
@Published var number: Int = 1
}

视图 1

import Foundation
import SwiftUI

struct SliderView: View {

@State private var text = "1"
@State private var isEditing = false
@State private var celsius: Double = 1

@StateObject var modelData = ModelData()

var body: some View {
    VStack {
        
        VStack {
            Text("Number from slider: \(Int(round(celsius)), specifier: "%d")")
            
            Slider(value: $celsius,
                   in: 1...20, step:1.0)
        }.onChange(of: celsius) { _ in
        
            self.text = String(Int(round(celsius)))
            self.modelData.number = Int(round(celsius))
        }
        
        HStack {
            Text("Number")
            Spacer()
            Text(String(text))
        }.padding()
    }
    }
    }

    struct SliderView_Previews: PreviewProvider {
    static var previews: some View {
    SliderView()
    }
    }

视图 2

import SwiftUI

struct SettingsView: View {
@ObservedObject var modelData = ModelData()

var body: some View {
    ZStack {
        Color.red
        VStack {
        Image("Settings")
            .foregroundColor(.blue)
            .font(.system(size: 100.0))
            Text(String(format: "Number is %d ", modelData.number))
        }
    }
    
}
}

当 SliderView 中的数据发生变化时,SettingsView 不会更新,它仍保留 ModelData 的默认值。

此致, 奥勒良

在您 TabView 的视图中, 声明 @StateObject var modelData = ModelData()

并使用 .environmentObject(modelData).

将其传递给 View1

View1 中使用 @EnvironmentObject var modelData: ModelData。对 View2.

做同样的事情