我尝试在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,您能帮我保存一下吗?
感谢您的宝贵时间!
答案 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])
}
})
}
}