SwiftUI 从选择器的字符串结果中设置一个绑定

SwiftUI set a Binding from the String result of a picker

我绞尽脑汁想弄清楚如何在我的 SwiftUI 视图中绑定选取的值:

选择器需要绑定到从标签返回的 Int。我需要将此 Int 转换为 String 并设置绑定。怎么样?

struct ContentView: View {

   @Binding var operatorValueString:String

    var body: some View {

         Picker(selection: queryType, label: Text("Query Type")) {
             ForEach(0..<DM.si.operators.count) { index in
                 Text(DM.si.operators[index]).tag(index)
             }
         }.pickerStyle(SegmentedPickerStyle())
    }
}

如何以及在何处设置我的 operatorValueString?

operatorValueString = DM.si.operators[queryType] //won't compile.

只要选取器的选择发生变化,您就可以使用自己设置字符串的自定义绑定来实现结果:

struct ContentView: View {
    @State private var operatorString = ""

    var body: some View {
        VStack {
            Subview(operatorValueString: $operatorString)
            Text("Selected: \(operatorString)")
        }
    }
}

struct Subview: View {
    @Binding var operatorValueString: String
    @State private var queryType: Int = 0

    let operators = ["OR", "AND", "NOT"]

    var body: some View {

        let binding = Binding<Int>(
            get: { self.queryType },
            set: {
                self.queryType = [=10=]
                self.operatorValueString = self.operators[self.queryType]
            })

        return Picker(selection: binding, label: Text("Query Type")) {
            ForEach(operators.indices) { index in
                Text(self.operators[index]).tag(index)
            }
        }.pickerStyle(SegmentedPickerStyle())
    }
}