如何在 swiftUI 中显示数组数组
Posted
技术标签:
【中文标题】如何在 swiftUI 中显示数组数组【英文标题】:How do I display an Array of Arrays in swiftUI 【发布时间】:2021-08-22 08:42:47 【问题描述】:在膳食计划应用中,用户选择一周中每一天所需的项目,从而为每一天创建一系列项目。然后将这些数组插入到购物清单数组中,创建一个包含所有商品的数组数组。
我一直在尝试显示组合列表。在我的代码中,我正确地返回了数组的计数,但是当我尝试显示每个数组中的项目时,我失败了。任何帮助将不胜感激!
这是我正在尝试做的一个简化示例:
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)
【问题讨论】:
【参考方案1】:首先,在ForEach
或List
中使用较新的0..<shoppingList.count
,因为当您更改项目计数时,您将面临列表未更新的问题,例如this case。请改用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])")
【讨论】:
感谢您的回复,这很有帮助! @TJMac:定义你想要的东西的正确方法是Array<Array<String>>
当数据发生变化时,基于索引的事情并不是很好,因为过去是 bread
的东西现在在 eggs
所在的行中。可能会导致那些不稳定的标识符警告并导致奇怪的动画。我认为像@workingdog 这样的名字做ID是一种更可靠的方法。但是,是的,indices
更好,因为像 ArraySlice
这样的东西并不总是从索引 0 开始。理想情况下,这个购物清单中的项目将是它们自己的结构,只要它们存在,每个项目都有自己的结构唯一且不变的 ID。【参考方案2】:
你可以这样做:
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)")
【讨论】:
我不确定我之前的尝试中哪里出错了,但我认为我之前尝试过但没有成功。根据您的回复,我回去了,现在它工作正常。感谢您的帮助,这是我最终采用的解决方案。以上是关于如何在 swiftUI 中显示数组数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在数组大小更改后刷新 ForEach 显示元素的数量(SwiftUI,Xcode 11 Beta 5)