动态更改选择器的内容

时间:2020-06-07 13:11:38

标签: swiftui

我想动态更改Picker的内容。
但是我认为您不能将Binding属性传递给ForEach。

@Binding var options: [String]
@Binding var selectedIndex: Int

var body: some View {
    Picker(selection: self.$selectedIndex, label: Text("")) {
        ForEach(0..<self.$options.count) { // error: Cannot assign to property: 'count' is a get-only property
            Text(self.options[$0])
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这里是可能解决方案的演示。经过Xcode 11.4 / iOS 13.4的测试

struct TestPickerView: View {
    @Binding var options: [String]
    @Binding var selectedIndex: Int

    var body: some View {
        Picker(selection: self.$selectedIndex, label: Text("")) {
            ForEach(Array(self.options.enumerated()), id: \.element) { index, item in
                Text(item).tag(index)
            }
        }.id(options)     // << important !!
    }
}

注意:a。选择器必须显式依赖于选择要被更新时改变的选项数/重建,这是{1} {}是需要