将新项目添加到列表后,选取器不会刷新



我希望动态更新Picker的内容。例如,在视图出现后加载选取器的列表。下面是示例代码,但不能按预期工作。预期行为为:

  • 单击"添加黄色"按钮后,"黄色"将显示在列表和选择器中

观察结果为:

  • 单击"添加黄色"按钮后,"黄色"将显示在列表中,但不会显示在选择器中

有人知道代码出了什么问题吗?

感谢

struct ContentView: View {
@State var selection = 0
@State var colors: [String] = ["red", "blue", "green"]
var body: some View {
VStack {
Picker(selection: $selection, label: Text("Color")) {
ForEach(self.colors, id: .self) { color in
Text(color)
}
}
List(colors, id: .self) { color in
Text(color)
}
Button(action: {
self.colors = ["red", "blue", "green", "yellow"]
}) {
Text("Add Yellow")
}
}
}
}

以下工作原理。使用Xcode 11.4/13.4 进行测试

Picker(selection: $selection, label: Text("Color")) {
ForEach(self.colors, id: .self) { color in
Text(color)
}
}.id(colors)      // << here !!

最新更新