ObservableObject是SwiftUI应用中常用的方法,但经常遇到数据变化不符合预期,看看,下面是问题,您是否遇到?
1. 定义ObservableObject模型
class Counter: ObservableObject {
@Published var count = 0
// 更改count方法
func increment(){
count += 1
}
}
2. 使用ObservableObject共享数据
如果希望多视图共享数据,需要传递的是模型;而不是像数据库和文件一样,直接更改和读取数据。
struct ContentView: View {
// 使用Model模型数据
@StateObject var model = Counter()
@State var newUsername = ""
var body: some View {
VStack(spacing: 12) {
Text("ObservableObject示例")
.font(.title2)
.padding(.bottom,44)
Text("主视图模型数据: \(model.count)")
.padding(.vertical,22)
// 1. 同步变化的方法 - 向子视图传递值
OBSubView(user: model)
// 2. 不能同步
StandAloneSubView()
子视图同步变化
注意,只接收,不初始化
struct OBSubView: View{
@ObservedObject var user:Counter
var body: some View{
HStack{
Text("共享子视图:\(user.count)")
Spacer()
}
}
}
错误用法
struct StandAloneSubView: View{
@ObservedObject var user = Counter()
var body: some View{
HStack{
Text("独立子视图:\(user.count)")
Spacer()
}
}
}
这里,重新初始化,数据不能同步变化。
要点总结: 在需要共享数据时,需要传递Model,避免在子视图中重新初始化。
如果对您有帮助,欢迎关注、点赞和打赏,谢谢!