如何将 SwiftUI ForEach 与字典 [ customEnum : customStrut ] 结合使用 - 出现“符合‘RandomAccessCollection’”错误

Gre*_*reg 4 swift swift-dictionary swiftui

我如何纠正此代码以防止构建失败?基本上想要使用 ForEach 迭代基于 [ customEnum : customStrut ] 的字典。

否则,如果这是有问题的,是否有其他方法来实现 SwiftUI 支持?

错误

在“ForEach”上引用初始化程序“init(_:id:content:)”要求“[GCFilterViewOptions.FilterOptions : GCFilterViewOptions.FilterOptionValues]”符合“RandomAccessCollection”

类型 '(key: GCFilterViewOptions.FilterOptions, value: GCFilterViewOptions.FilterOptionValues)' 不能符合 'Hashable';只有 struct/enum/class 类型可以符合协议

代码

import SwiftUI

struct GCFilterViewOptions: View {
    enum FilterOptions {
        case NewLine
        case Comma
        case Space
    }
    struct FilterOptionValues {
        var title : String
        var selected : Bool
    }
    var filterSelections : [FilterOptions : FilterOptionValues] = [
        FilterOptions.NewLine : FilterOptionValues(title: "New Line", selected: true),
        FilterOptions.Comma : FilterOptionValues(title: "Comma", selected: true),
        FilterOptions.Space : FilterOptionValues(title: "Space", selected: false)
    ]

    var body : some View {
        HStack {
            ForEach(filterSelections, id:\.self) { filterOption in.  // ** ERRORS HERE **
                Text("TBD")
                // Will be putting checkboxes here - i.e. so can chose which ones 
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 5

由于 states 字典不是“随机访问”能力的集合,因此它不能直接在 ForEach 中使用,这是可能的方法

HStack {
    ForEach(Array(filterSelections.keys.enumerated()), id:\.element) { _, key in
        Text("TBD \(self.filterSelections[key]?.title ?? "")")
        // Will be putting checkboxes here - i.e. so can chose which ones
    }
}
Run Code Online (Sandbox Code Playgroud)