使用 ForEach SwiftUI 循环多个数组
Posted
技术标签:
【中文标题】使用 ForEach SwiftUI 循环多个数组【英文标题】:Looping multiple arrays with ForEach SwiftUI 【发布时间】:2020-12-19 19:09:58 【问题描述】:用户界面:https://imgur.com/a/0BbJBFc
我在示例代码中使用ForEach
来遍历矿物数组,但我找不到合适的解决方案来循环矿物下方的第二个数组(矿物量)。
在不同的项目中,到目前为止,我做到了ForEach
循环两个数组,但对于每种矿物,都显示Planet
的所有数量,第二个矿物显示Planet
的所有数量等等。
我确实创建了一个包含两个数组的新结构,但没有成功。添加绑定属性也失败了。我希望学习一种新的快速方法来实现愿望的外观。
数据文件
import Foundation
struct Planet: Identifiable
var id = UUID()
var name: String
var minerals: [String]
var mineralAmount: [String]
let planetsData: [Planet] = [
Planet(name: "Jupiter", minerals: ["Iron", "Gold", "Copper"], mineralAmount: ["10K", "20K", "30K"]),
Planet(name: "Earth", minerals: ["Lithium", "Aluminium", "Quartz"], mineralAmount: ["40K", "50K", "60K"])
]
内容视图
import SwiftUI
struct ContentView: View
var planet: Planet
var body: some View
VStack()
ForEach(planet.minerals, id: \.self) item in
Text(item)
.font(.system(size: 22, weight: .regular))
.foregroundColor(.primary)
Text("amount to be added")
.font(.system(size: 22, weight: .regular))
.foregroundColor(.primary)
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView(planet: planetsData[0])
[1]: https://i.stack.imgur.com/4MDKs.png
【问题讨论】:
其实我还没有得到目标,你想遍历planetsData
,然后遍历每个行星的minerals
,对吧?
矿物正下方是什么意思?您是否在同一页面上寻找两个不同的列表,一个是矿物,第二个是单个星球的矿物含量?您能否提供一些有关最终所需 UI 的示例?
没有。我想遍历矿物质,然后遍历矿物质量。一个列表以大字体显示“Iron”,在“10K”下方以小字体显示。
@emreoktem 刚刚添加了一个 UI 参考
【参考方案1】:
你可以这样实现:
ScrollView
VStack (alignment: .leading)
ForEach(0..<planet.minerals.count) i in
HStack
Circle()
.frame(width: 50, height: 50)
.foregroundColor(.black)
VStack (alignment: .leading)
Text(planet.minerals[i])
.font(.system(size: 22, weight: .regular))
.foregroundColor(.primary)
Text(planet.mineralAmount[i])
.font(.system(size: 22, weight: .regular))
.foregroundColor(.secondary)
Spacer()
【讨论】:
【参考方案2】:你为什么不从这两个值创建一个字典
mineralsDic = [minerals: mineralAmount]
我当然知道dictionary
的语法,但我只是想解释一下我的想法 + 你可以只创建一个复杂性更低、性能更好的循环,而不是创建 2 个循环
【讨论】:
这是正确答案。通过拥有两个单独的数组,您没有将数量与矿物质相关联。如果您要在某个时候对矿物阵列进行排序,则数量阵列将不匹配。通过使用字典,您可以键入矿物的数量。您可以将字典键用作 ForEach 中的项目,并使用当前的键迭代返回金额。 是的,您可以制作键数组并在其上循环,并使用 O(n) 而不是 O(n^2) 打印键的值和值 @Menaim SwiftUI 初学者在这里 ContentView 会在你的情况下迭代矿物Dic 吗?你能提供一些解决方案的代码吗?以上是关于使用 ForEach SwiftUI 循环多个数组的主要内容,如果未能解决你的问题,请参考以下文章
视图模型数组上的 ForEach 循环问题导致 Xcode 编译错误 - SwiftUI
SwiftUI ListView 没有访问 ForEach 循环
SwiftUI:如何使用 ForEach 循环使用各种代码的各种结构?