如何解决将步进值传递给另一个视图 - SwiftUI
我在 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
在您的情况下 - “拥有”,每个子级使用绑定更新该数组中分配的值。这样,父级可以轻松计算这些值的总和,因为它拥有整个数组。
struct ContentView: View {
@State var values = [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)
}
}
}
,
@State
进入父级 (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)
}
}
结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。