swiftui - 将步进值传递给另一个视图 - 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 但没有用。
解决方案
这里有多种方法,最终是数据组织的问题。
一种思考方式是,父母(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)
}
}
}
推荐阅读
- flutter - 每次我尝试测试它时,我都会在 web 的颤振版本中遇到这个错误。但是在手机上可以正常使用
- sql - 如何获得超出限制且不为空的元素的平均数量
- bash - 使用 COPY 从标准输入填充 Postgres 表中的特定列时出现语法错误
- google-cloud-platform - Google Cloud Platform 的 Cloud-init 脚本
- angular - Angular 通用仅适用于特定模块
- ffmpeg - 将淡化文本与重新编码视频相结合
- python - 从 xero-python-oauth2-starter-master 安装依赖项时“git@github.com: Permission denied (publickey)”
- python - 部署云功能时的问题
- css - Safari 的扭曲 css 顶部
- three.js - Threejs 使用视口和剪刀“查看裁剪”