SwiftUI观察到的对象未跨视图更新

SwiftUI观察到的对象未跨视图更新,swiftui,observedobject,Swiftui,Observedobject,我无法让可观察对象模型工作 我有两个视图和一个视图模型的简单演示。视图模型为 import Foundation class Score: ObservableObject { @Published var total = 0 } 将一个按钮视图添加到总数中 struct ScoreButton: View { @ObservedObject var score = Score() var body: some View { Button(act

我无法让可观察对象模型工作

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

import Foundation

class Score: ObservableObject {

    @Published var total = 0

}
将一个按钮视图添加到总数中

struct ScoreButton: View {
    @ObservedObject var score = Score()

    var body: some View {
        Button(action: {
            score.total += 1
        }, label: {
            Text("Add 1 to Total")
        })
    }
}
然后显示开始视图以显示结果

struct OBDemo: View {

    @ObservedObject var result = Score()

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

        }
    }
}
如果我将class、button和start视图放在一个文件中,它就会工作

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

struct ScoreButton: View {
    @ObservedObject var result = Score() // instance #1
您需要在两个视图中使用相同的实例-将
@ObservedObject
传递给子视图:

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")
        })
    }
}
struct-OBDemo:View{
@ObservedObject var result=Score()//在父视图中创建
var body:一些观点{
VStack{
ScoreButton(result:result)//您正在创建两个不同的
Score实例:

struct ScoreButton: View {
    @ObservedObject var result = Score() // instance #1
您需要在两个视图中使用相同的实例-将
@ObservedObject
传递给子视图:

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")
        })
    }
}
struct-OBDemo:View{
@ObservedObject var result=Score()//在父视图中创建
var body:一些观点{
VStack{

ScoreButton(结果:结果)//谢谢。我如何更新ScoreButton的预览?静态变量预览:一些视图{ScoreButton(分数:#?#)@Jmcg你可以做
ScoreButton(分数:分数())
谢谢。我如何更新ScoreButton的预览?静态变量预览:一些视图{ScoreButton(分数:#?#)@Jmcg您可以执行
score按钮(score:score())