如何在 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)
}
}
首先,较新的在 ForEach
或 List
中使用 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)")
}
}
}
}
}
}
在膳食计划应用中,用户选择一周中每一天所需的物品,这会为每一天创建一个物品数组。然后将数组插入到购物清单数组中,创建包含所有项目的数组数组。
我无法显示组合列表。在我的代码中,我正确地返回了数组的计数,但是当我尝试显示每个数组中的项目时,我失败了。如有任何帮助,我们将不胜感激!
这是我正在尝试做的一个简化示例:
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)
}
}
首先,较新的在 ForEach
或 List
中使用 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)")
}
}
}
}
}
}