在视图中,尝试通过List遍历字典时发生报错。
List {
ForEach(exchangeRate.ExchangeRateStructInfo.exchangeRates,id: \.self) { (key,value) in
Button(action: {
}, label: {
Text(key)
})
}
}
报错内容为:
Generic struct 'ForEach' requires that '[String : CurrencyData]' conform to 'RandomAccessCollection'
Type 'Dictionary<String, CurrencyData>.Element' (aka '(key: String, value: CurrencyData)') cannot conform to 'Hashable'
经排查问题在于ForEach的遍历方式有问题。在Swift中,ForEach 或 List 都需要一个单一的数据源来渲染列表项,因为我想要遍历的exchangeRates是一个字典,直接传递(keys,value)这两个参数是不被支持的。
解决方案为:将exchangeRates.keys或者将字典转换为一个数组,再在ForEach 或 List 中进行遍历:
List {
ForEach(Array(exchangeRate.ExchangeRateStructInfo.exchangeRates.keys),id: \.self) { keys in
Button(action: {
}, label: {
Text(keys)
})
}
}
通过Array(exchangeRate.ExchangeRateStructInfo.exchangeRates.keys)生成一个String数组,作为ForEach的数据源。
这样,问题得到解决。