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
相关产品推荐
相关产品推荐

