【发布时间】:2019-11-23 07:33:12
【问题描述】:
在 ParentView 中使用 @State 和在 ChildView 中使用 @Binding,我们可以在打印视图和子视图中的 2 个变量的值之间建立联系。使用这样的代码:
ChildView(valueFromParent: $valueInParent)
在 ParentView 中使用 @State 拥有 valueInParent,在 ChildView 中使用 @Binding 拥有 valueFromParent。这样,这两个变量现在是相关的,改变一个会改变另一个。
是否可以在 ForEach 循环中使用行的 ID 号在两个视图之间进行这种绑定?像这样的:
ForEach((1...15), id: \.self) {item in
ChildView(valueFromParent[item]: self.$valueInParent[item])
}
我知道另一种方法 - 创建一个项目数组以传递给具有数组内 ID 的列表:
@State private var list = [
(id: 0, model: ListItemModel()),
(id: 1, model: ListItemModel()),
(id: 2, model: ListItemModel()),
(id: 3, model: ListItemModel()),
(id: 4, model: ListItemModel())
]
编辑:但我希望避免使用上述带有固定项目列表的数组。
我想使用这样的 ForEach 循环创建一个简单的原型:ForEach((1...15), id: .self)。问题是我不知道如何从列表中的特定行访问 var 的值。
【问题讨论】:
-
这是可能的,但如果它真的是你需要的,请三思而后行,因为
ForEach(range)是常量容器,即。您将无法更改其大小,即。由于超出范围异常,在模型容器中添加/删除项目要么无效(添加时)或崩溃(删除时)。 -
感谢您告诉我这些限制。是的,这仍然是我需要的。它用于原型制作目的。快速创建列表并更改行内的内容。它不是用于生产
标签: xcode swiftui swiftui-list