将步进器值传递给另一个视图-SwiftUI

将步进器值传递给另一个视图-SwiftUI,swiftui,stepper,Swiftui,Stepper,我在SwiftUI中有一个非常简单的“应用程序” 如何将步进器值从列表传递到结构SumOfValue或ContentView?但我想传递步进值的和,以防从图像中得到的值是8 struct ContentView: View { var body: some View { VStack{ List{ ProductList() ProductList()

我在SwiftUI中有一个非常简单的“应用程序”

如何将步进器值从列表传递到结构SumOfValue或ContentView?但我想传递步进值的和,以防从图像中得到的值是8

struct ContentView: View {
    var body: some View {
        VStack{
            List{
                ProductList()
                ProductList()
                
            }
            Spacer()
            Text("Sum of stepper value: ?????")
                .padding(.bottom, 50
                )
            
            SumOfValue()
        }
    }
}

struct ProductList:View {
    @State var stepperValueTest: Int = 0
    var body: some View {
        HStack {
            Stepper("Value: \(stepperValueTest)", value: $stepperValueTest)
        }   
    }
}

struct SumOfValue: View {
    var body: some View {
        Text("or here sum of value: ????? ")
            .foregroundColor(Color.red)
    }
}

我尝试使用@Binding,但没有起作用。

@状态
放入父级(ContentView),将
@Binding
放入子级(ProductList和SumOfValue)

试试这个:

struct ContentView: View {

    /// States here!
    @State var firstStepperValue: Int = 0
    @State var secondStepperValue: Int = 0

    var body: some View {
        VStack{
            List{

                /// pass it in here!
                ProductList(stepperValueTest: $firstStepperValue)
                ProductList(stepperValueTest: $secondStepperValue)
                
            }
            Spacer()

            /// add the values here
            Text("Sum of stepper value: \(firstStepperValue + secondStepperValue)")
                .padding(.bottom, 50
                )
            
            /// you can also pass it in here
            SumOfValue(first: $firstStepperValue, second: $secondStepperValue)
                .padding(.bottom, 100)
        }
    }
}

struct ProductList:View {

    /// Binding here!
    @Binding var stepperValueTest: Int
    var body: some View {
        HStack {
            Stepper("Value: \(stepperValueTest)", value: $stepperValueTest)
        }
    }
}

struct SumOfValue: View {
    @Binding var first: Int
    @Binding var second: Int
    
    var body: some View {
        Text("or here sum of value: \(first + second) ")
            .foregroundColor(Color.red)
    }
}
结果:


这里有多种方法,这最终是一个数据组织的问题

考虑的一种方法是,在您的案例中,父级-
ContentView
拥有一个值数组,每个子级使用绑定更新其在该数组中分配的值。这样,父级可以轻松计算这些值的总和,因为它拥有整个数组

struct ContentView: View {
   @State var values = [0,0,0]

   var body: some View {
      VStack {
         List {
            ProductList(stepperValueTest: $values[0])
            ProductList(stepperValueTest: $values[1])
            ProductList(stepperValueTest: $values[2])
         }
         Text("Sum: \(sum)")
      }
   }

   var sum: Int { values.reduce(0, +) }
}
struct ProductList:View {
    @Binding var stepperValueTest: Int // change to Binding
    var body: some View {
        HStack {
            Stepper("Value: \(stepperValueTest)", value: $stepperValueTest)
        }   
    }
}