首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI ObservedObject没有跨视图更新

SwiftUI ObservedObject没有跨视图更新
EN

Stack Overflow用户
提问于 2020-09-01 21:17:57
回答 1查看 232关注 0票数 1

我不能让可观察到的对象模型工作。

我有一个两个视图的简单演示和一个视图模型。视图模型为;

代码语言:javascript
复制
import Foundation

class Score: ObservableObject {

    @Published var total = 0

}

按钮视图,将其添加到总数中;

代码语言:javascript
复制
struct ScoreButton: View {
    @ObservedObject var score = Score()

    var body: some View {
        Button(action: {
            score.total += 1
        }, label: {
            Text("Add 1 to Total")
        })
    }
}

然后用一个开始视图来显示结果;

代码语言:javascript
复制
struct OBDemo: View {

    @ObservedObject var result = Score()

    var body: some View {
        VStack {
            ScoreButton()
                .padding()
            Text("Total = \(result.total)")

        }
    }
}

如果我将类、按钮和启动视图放在一个文件中,它就能工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-01 21:25:34

您正在创建两个不同的Score实例

代码语言:javascript
复制
struct ScoreButton: View {
    @ObservedObject var result = Score() // instance #1
代码语言:javascript
复制
struct OBDemo: View {
    @ObservedObject var result = Score() // instance #2

您需要在两个视图中使用相同的实例--将@ObservedObject传递给子视图:

代码语言:javascript
复制
struct OBDemo: View {
    @ObservedObject var result = Score() // create in the parent view

    var body: some View {
        VStack {
            ScoreButton(result: result) // <- pass to the child view
                .padding()
            Text("Total = \(result.total)")

        }
    }
}

struct ScoreButton: View {
    @ObservedObject var score: Score // declare only

    var body: some View {
        Button(action: {
            score.total += 1
        }, label: {
            Text("Add 1 to Total")
        })
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63695588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档