SwiftUI 从选择器的字符串结果中设置绑定
Posted
技术标签:
【中文标题】SwiftUI 从选择器的字符串结果中设置绑定【英文标题】:SwiftUI set a Binding from the String result of a picker 【发布时间】:2019-08-28 15:48:51 【问题描述】:我正在努力弄清楚如何在我的 SwiftUI 视图中绑定选取的值:
选择器需要绑定到标签返回的 Int。我需要将此 Int 转换为字符串并设置绑定。怎么样?
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] //不会编译。
【问题讨论】:
您是否在某处定义了 queryType,Picker 期待绑定。 BTW DM.si.operators.indices 比计数更容易使用。我不喜欢分段选择器。我还必须将 ObservedObject 与 PassthroughSubject 发布者一起使用,以使其按我想要的方式工作。 有样品要分享吗?这让我发疯了。 【参考方案1】:只要选择器的选择发生变化,您就可以使用自己的自定义绑定设置字符串来实现结果:
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 = $0
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())
【讨论】:
这就是我最终要做的。似乎 Picker 应该有另一个绑定。 不幸的是,当您返回编辑时,这会导致无限循环。如何设置 Binding 以反映现有选择? @jimijon 我不关注。导致无限循环的代码是什么? 我需要在绑定中公开发送 operatorValueString... 然后我需要将绑定设置为正确的选择器编号。但是,这意味着我需要在 init 中设置 self.querytype,这会导致循环。我一定错过了一些非常明显的东西 这是我用的:以上是关于SwiftUI 从选择器的字符串结果中设置绑定的主要内容,如果未能解决你的问题,请参考以下文章
如何在 API 28 中设置 android 日期和时间选择器的样式
如何在 android 中设置 react native expo 选择器的样式