Swiftui 如何访问另一个结构中的变量?迅捷

Swiftui 如何访问另一个结构中的变量?迅捷,swiftui,Swiftui,我想访问其他结构中的变量以获得总计数 示例代码将更好地演示: struct level1: View { @State var score1 = 5 } struct level2: View { @State var score2 = 7 } 在另一个结构中,我希望能够使用score1和score2变量。下面的代码不工作,但我需要这样的东西 struct finalScore: View { @State var totalScore = level1.score1 + le

我想访问其他结构中的变量以获得总计数

示例代码将更好地演示:

struct level1: View {

@State var score1 = 5 

}

struct level2: View {

@State var score2 = 7 

}
在另一个结构中,我希望能够使用score1和score2变量。下面的代码不工作,但我需要这样的东西

struct finalScore: View {

@State var totalScore = level1.score1 + level2.score2 

}

您需要使用@State&@Binding来完成此任务。这里有一个工作代码,可以满足您的要求

import SwiftUI

struct ContentView: View {

    @State var score1: Int = 5
    @State var score2: Int = 7

    var body: some View {
        VStack {
            HStack {
                FirstView(score1: $score1)
                SecondView(score2: $score2)
                Spacer()
            }
            Divider()
            Text("The total score is \(score1 + score2)")
            Spacer()
        }
        .padding()
    }
}

struct FirstView: View {
    @Binding var score1: Int

    var body: some View {
        Stepper(value: $score1, in: 0...100) {
            Text("\(score1)")
        }
    }
}

struct SecondView: View {
    @Binding var score2: Int

    var body: some View {
        Stepper(value: $score2, in: 0...100) {
            Text("\(score2)")
        }
    }
}

用不同的方式重新思考一下。。。如下所示,单源信任、模型分离-视图分离、模型更改-视图反应,这就是SwiftUI的方式


试图将其实现到我的代码中,但没有成功。然后我复制粘贴了完全相同的代码。还是不行。得到荒谬的错误,没有意义。谢谢你,把你的密码给我。确保在代码开头添加了导入SwiftUI。我收到多个“调用中参数'vm'缺少参数”错误。有办法修复吗?我运行了Asperi的代码,没有发现任何错误。您使用的是哪个版本的XCode?@IKaya,如果您只是复制粘贴了我的演示代码,我假设您必须采用所有相应的部分,因为我为您的
level1
level2
finalScore
视图更换了承包商。以my
MainView
为例。回答得好,在子结构中使用相同的已发布模型。
import SwiftUI
import Combine

class ScoreModel: ObservableObject {
    @Published var score1 = 5
    @Published var score2 = 7
}

struct MainView: View {
    @ObservedObject var vm: ScoreModel = ScoreModel()

    var body: some View {
        VStack {
            level1(vm: vm)
            level2(vm: vm)
            Divider()
            finalScore(vm: vm)
        }
    }
}
struct level1: View {
    @ObservedObject var vm: ScoreModel

    var body: some View {
        Text("\(vm.score1)")
    }
}

struct level2: View {
    @ObservedObject var vm: ScoreModel

    var body: some View {
        Text("\(vm.score2)")
    }
}

struct finalScore: View {
    @ObservedObject var vm: ScoreModel

    var body: some View {
        Text("\(vm.score1 + vm.score2)")
    }
}