如何在swift中实现观察者



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

模型
import Foundation
class ModelData : ObservableObject {
@Published var number: Int = 1
}

View1

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()
}
}

View2

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内部的数据发生变化时,setingsview不会更新,它仍然使用ModelData的默认值。

最诚挚的问候,蛹的

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

通过.environmentObject(modelData)传递给View1

View1中使用@EnvironmentObject var modelData: ModelData。对View2执行同样的操作。

最新更新