在SwiftUI的LazyVGrid中遍历数组报错:Type '()'无法符合View
问题原因与解决办法
错误根源
你用的是数组的forEach方法,这个方法仅用于遍历数组执行闭包逻辑,返回值是Void(即()),但LazyVGrid的内容区域要求传入符合View协议的元素,因此编译器会抛出“Type '()' cannot conform to 'View'”的错误。
苹果官方文档里用的是SwiftUI提供的**ForEach视图结构体**,它本身是符合View协议的类型,专门用来在视图中遍历数据生成子视图,和数组的forEach方法是完全不同的东西。
修复后的代码
将数组的forEach替换为SwiftUI的ForEach即可解决问题,代码如下:
var body: some View { NavigationStack { VStack { ScrollView { LazyVGrid(columns: threeColumnGrid) { // 使用SwiftUI的ForEach视图遍历数组 ForEach(employeeContactsTempData) { contact in VStack { Text(contact.firstName) } } } } Spacer() }.background(.blue) } }
额外注意事项
如果你的contact对象未遵循Identifiable协议,需要在ForEach中显式指定唯一标识的属性,比如对象的id字段:
ForEach(employeeContactsTempData, id: \.id) { contact in // 子视图内容 }
内容的提问来源于stack exchange,提问作者user14023669
相关产品推荐
相关产品推荐

