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