首页 > 解决方案 > 将步进值传递给另一个视图 - SwiftUI

问题描述

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

我如何将步进值从列表传递到 struct 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 但没有用。

标签: swiftuistepper

解决方案


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

一种思考方式是,父母(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)
        }   
    }
}

推荐阅读