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())
}
}
我绞尽脑汁想弄清楚如何在我的 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())
}
}