Swift 使用ForEach遍历字典
Swift 使用ForEach遍历字典

Swift 使用ForEach遍历字典

在视图中,尝试通过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的数据源。

这样,问题得到解决。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注