在SwiftUI中如何展示嵌套数组(数组的数组)结构的内容?
问题原因
- 外层
ForEach遍历的是购物清单数组的索引,你拿到的参数list是0、1这类索引值,不是对应的单日物品子数组 - 内层
List写的0..<list是从0遍历到当前索引值,完全没有取到对应子数组的内容,也没有展示实际的物品字符串
修正后代码
import SwiftUI struct ShoppingListView: View { var shoppingList: [[String]] var body: some View { VStack(alignment: .leading) { // 外层遍历所有单日购物清单 ForEach(0..<shoppingList.count, id: \.self) { index in Text("第\(index+1)天购物清单(共\(shoppingList[index].count)件物品)") VStack { // 内层遍历当前单日清单的所有物品 List(shoppingList[index], id: \.self) { item in Text("物品:\(item)") } .frame(height: CGFloat(shoppingList[index].count) * 44) // 适配List高度,避免默认撑满父容器 } } } .padding() } } struct ShoppingListView_Previews: PreviewProvider { static var previews: some View { let list = [["eggs", "bread", "milk", "cheese" ],["steak", "potatoes", "salad kit"]] ShoppingListView(shoppingList: list) } }
补充说明
- 如果后续需要支持删除、新增物品的操作,建议给每个物品、每个单日清单加唯一标识ID,不要用
\.self当id,避免元素重复时出现渲染异常 - 如果不需要按天分区展示,想直接展示合并后的所有物品,可以先把嵌套数组拍平:
shoppingList.flatMap { $0 }再遍历即可
内容的提问来源于stack exchange,提问作者TJMac
相关产品推荐
相关产品推荐

