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 选择器的样式

在 XPages 中设置 Dojo 时间选择器的开始时间和结束时间

如何在全局样式表中设置角度4组件选择器的样式?

SwiftUI 中日期选择器的用户自定义通知时间

在 SwiftUI TextEditor 中设置光标位置