如何在 swiftUI 中显示数组的数组

How do I display an Array of Arrays in swiftUI

在膳食计划应用中,用户选择一周中每一天所需的物品,这会为每一天创建一个物品数组。然后将数组插入到购物清单数组中,创建包含所有项目的数组数组。

我无法显示组合列表。在我的代码中,我正确地返回了数组的计数,但是当我尝试显示每个数组中的项目时,我失败了。如有任何帮助,我们将不胜感激!

这是我正在尝试做的一个简化示例:

import SwiftUI

struct ShoppingListView: View {
    
    var shoppingList: Array<Array<String>>

    
    var body: some View {
        VStack(alignment: .leading) {
            ForEach(0..<shoppingList.count, id: \.self) {list in
                Text("number of arrays")
                VStack {
                    List(0..<list) { item in
                        Text("item = \(item)")
                    }
                }
            }
        }
    }
}

struct ShoppingListView_Previews: PreviewProvider {
    static var previews: some View {
        let list = [["eggs", "bread", "milk", "cheese" ],["steak", "potatoes", "salad kit"]]
        ShoppingListView(shoppingList: list)
    }
}

首先,较新的在 ForEachList 中使用 0..<shoppingList.count,因为在您更改项目计数的那一天,您将面临列表未更新的问题,就像这个 。请改用 shoppingList.indices

您正在枚举索引,但看起来您希望获得块中的项目。这不会发生。

完美地为你的物品创建一个 struct 并使其符合 Identifiable,然后你就可以调用 ForEach(shoppingList) { 并在区块中获取你的物品。

在那之前你可以毫无问题地使用枚举索引,只需从列表中按索引获取你的项目:

var shoppingList: Array<Array<String>> = [["eggs", "bread", "milk", "cheese" ],["steak", "potatoes", "salad kit"]]

var body: some View {
    VStack(alignment: .leading) {
        ForEach(shoppingList.indices, id: \.self) { i in
            Text("number of arrays")
            let sublist = shoppingList[i]
            VStack {
                List(sublist.indices, id: \.self) { j in
                    Text("item = \(sublist[j])")
                }
            }
        }
    }
}

你可以这样做:

struct ShoppingListView: View {

var shoppingList: [[String]] = [["1","2","3"], ["4","5","6"], ["7","8"]]

var body: some View {
    VStack(alignment: .leading) {
        Text("number of arrays is \(shoppingList.count)")
        ForEach(shoppingList, id: \.self) { list in
            VStack {
                List(list, id: \.self) { item in
                    Text("item = \(item)")
                }
            }
        }
    }
}
}