[SwiftUI]:ForEach不适用于字典数组,带有数组的字典

时间:2020-03-17 13:00:56

标签: arrays swift dictionary swiftui swiftui-list

我尝试在SwiftUI中遍历数组,但无法正常工作。

我的代码:

let arr_type2  = [
                    ["type":"Temperature","Units":["°C","°F","°K"]],
                    ["type":"Length","Units":["m","km","ft","yd","mi"]],
                    ["type":"Time","Units":["sec","min","hr","day"]],
                    ["type":"Volume","Units":["ml","lt","cups","pints","gallons"]]
                    ]

ForEach(arr_type2, id: \.self) { dict in //Error
        Text("")
}

错误:协议类型“ Any”不能符合“哈希”,因为只有具体类型才能符合协议

我刚刚开始学习SwiftUI,您能帮我保存一下吗?

感谢您的宝贵时间!

2 个答案:

答案 0 :(得分:2)

您可以使用

干净地编写它
struct Model:Hashable {
    let type:String
    let unnits:[String]
}

struct ContentView: View {

    let arr_type2 = [Model(type:"Temperature", unnits: ["°C","°F","°K"])]

    var body: some View {
           ForEach(arr_type2, id: \.self) { item in

            Text(item.type)
        }
    }
}

为什么要检查https://www.hackingwithswift.com/books/ios-swiftui/why-does-self-work-for-foreach

答案 1 :(得分:2)

您可以像这样使用ForEach

 var body: some View {
    let arr_type2  = [
        ["type":"Temperature","Units":["°C","°F","°K"]],
        ["type":"Length","Units":["m","km","ft","yd","mi"]],
        ["type":"Time","Units":["sec","min","hr","day"]],
        ["type":"Volume","Units":["ml","lt","cups","pints","gallons"]]
    ]

    return ForEach(0..<arr_type2.count, id: \.self) { index -> AnyView in
        let units = arr_type2[index]["Units"] as! [String]
        return AnyView(VStack {
            Text(arr_type2[index]["type"] as! String)
            ForEach(0..<units.count, id: \.self) { indexUnits in
                 Text(units[indexUnits])
            }

        })
    }

}