【发布时间】:2021-10-21 08:42:32
【问题描述】:
到目前为止,要在动态集合中的元素和 List 的行之间设置绑定,我们必须这样做:
List(Array(zip(data.indices, data)), id: \.1.id) { index, _ in
HStack {
Text((index + 1).description)
TextField("", text: Binding(
get: { data[index].text },
set: { data[index].text = $0 }
))
}
}
我们需要:绑定元素的索引; + List 的元素标识符(以避免奇怪的动画);和自定义Binding 以避免在删除最后一行时崩溃。
这很复杂(我不确定它是否非常有效)。 自 WWDC21 以来,我们有了新的语法(可以反向部署):
List($data) { $item in
HStack {
Text("Index ?")
TextField("", text: $item.text)
}
}
它更干净。
虽然强烈建议使用这种新语法,但如果能够访问闭包中的元素索引,那就太好了。你知道我们该怎么做吗?
编辑:
我试过这个(它有效),但我觉得这不是正确的做法:
let d = Binding(get: {
Array(data.enumerated())
}, set: {
data = $0.map {$0.1}
})
List(d, id: \.1.id) { $item in
HStack {
Text("\(item.0 + 1)")
TextField("", text: $item.1.text)
}
}
【问题讨论】:
标签: swift swiftui swiftui-list xcode13 swiftui-foreach