Swift ObservableObject的错误用法,如何在多视图间共享数据

ObservableObject是SwiftUI应用中常用的方法,但经常遇到数据变化不符合预期,看看,下面是问题,您是否遇到?

1. 定义ObservableObject模型

class Counter: ObservableObject {
    @Published var count = 0
    
    // 更改count方法
    func increment(){
        count += 1
    }
}

2. 使用ObservableObject共享数据

如果希望多视图共享数据,需要传递的是模型;而不是像数据库和文件一样,直接更改和读取数据。

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,避免在子视图中重新初始化。

如果对您有帮助,欢迎关注、点赞和打赏,谢谢!

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容