泛型元素数组无法在ForEach中使用的编译错误排查求助
问题根源与解决方案
你的代码核心问题是泛型类型C没有遵守CustomStringConvertible协议,但你在Text(item.description)里调用了description属性。SwiftUI的ForEach有多个重载初始化器,当代码存在这种基础错误时,编译器无法精准定位问题,才会抛出“无法转换为Range<Int>或Binding<C>”这类模糊的提示。
修正方案
方案1:让C遵守CustomStringConvertible
直接修改泛型约束,确保C本身支持description属性:
struct MultiselectFilterDropdown<C>: View where C : Identifiable, C : CustomStringConvertible, C.ID : Equatable, C.ID : CustomStringConvertible { var allItems: [C] var body: some View { VStack { ForEach(allItems) { item in Text(item.description) } } } }
方案2:利用已约束的ID属性展示内容
如果不想让C遵守CustomStringConvertible,可以使用已经约束了该协议的ID属性来生成文本:
struct MultiselectFilterDropdown<C>: View where C : Identifiable, C.ID : Equatable, C.ID : CustomStringConvertible { var allItems: [C] var body: some View { VStack { ForEach(allItems) { item in Text(item.id.description) } } } }
内容的提问来源于stack exchange,提问作者CalebK
相关产品推荐
相关产品推荐

