将 SwiftUI Picker 绑定到字典中保存的值

Posted

技术标签:

【中文标题】将 SwiftUI Picker 绑定到字典中保存的值【英文标题】:Binding SwiftUI Picker to value held in dictionary 【发布时间】:2020-03-25 16:35:24 【问题描述】:

以下代码编译并运行,但只有绑定到数组中的值的选择器起作用。那些在字典里的人失败了。任何想法为什么会这样?

import SwiftUI

struct ContentView: View 

    private var options : [String] = ["Bonjour", "Hello", "Hola"]

    @State private var choicesHeldInArray = [0, 2]
    @State private var choicesHeldInDict: [String: Int] = ["C3": 2, "C4":1]

    var body: some View 

        VStack 

            Picker(selection: $choicesHeldInArray[0], label: Text("Choice 1")) 
                ForEach(0 ..< options.count) 
                    Text(self.options[$0])
                
            

            Picker(selection: $choicesHeldInArray[1], label: Text("Choice 2")) 
                ForEach(0 ..< options.count) 
                    Text(self.options[$0])
                
            

            Picker(selection: $choicesHeldInDict["C3"], label: Text("Choice 3")) 
                ForEach(0 ..< options.count) 
                    Text(self.options[$0])
                
            

            Picker(selection: $choicesHeldInDict["C4"], label: Text("Choice 4")) 
                ForEach(0 ..< options.count) 
                    Text(self.options[$0])
                
            
        
    

【问题讨论】:

【参考方案1】:

Could the answer be something because of this?

简而言之 您不能使用 ForEach,因为:

它监视收藏并监控动作。使用无序的字典是不可能的。

【讨论】:

在上述每种情况下,ForEach 都会遍历数组 options。所以我不确定这是不是这个原因。这里的问题是选择的存储位置。

以上是关于将 SwiftUI Picker 绑定到字典中保存的值的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI视图onReceive方法接收“冗余”事件的解决

SwiftUI视图onReceive方法接收“冗余”事件的解决

SwiftUI:将动画添加到 Picker 而不将其添加到值中

SwiftUI,如何将 EnvironmnetObject Int 属性绑定到 TextField?

SwiftUI Picker,将 String 转换为 Double

没有标签的 SwiftUI Picker 视图