You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI:ForEach要求Platform遵循Hashable的问题求解

解决SwiftUI中ForEach要求Platform遵循Hashable的错误

你的问题出在ForEach使用id: \.self时,要求数组元素类型必须遵循Hashable协议,而你定义的Platform结构体没有实现这个协议,所以触发了报错。跟你提到的“同名调用两次”无关,下面给两种直接解决的方法:

方法一:让Platform遵循Hashable协议

因为你的Platform结构体里的name和image都是String类型(本身已遵循Hashable),Swift可以自动为你合成Hashable的实现,只需在结构体定义时加上: Hashable即可:

struct Platform: Hashable {
    let name: String
    let image: String
}

方法二:使用元素的唯一属性作为id

如果不想让Platform遵循Hashable,可改用结构体里的唯一属性作为标识(比如假设每个platform的name都是唯一的),修改ForEach的写法:

ForEach(platforms, id: \.name) { platform in
    PlatformRow(platform: platform)
}

两种方法选其一即可,第一种更通用,后续结构体属性有变动时,也无需修改ForEach的写法。

内容的提问来源于stack exchange,提问作者Flamee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:35:44