在 SwiftUI 中,如何迭代自定义对象的数组和属性
In SwiftUI, how to iterate over array that is and attribute of a custom object
我有一个带有两个属性的简单对象模型,第二个属性实际上是一个字符串数组。在一个简单的视图中,我想显示第一个属性 roleName 并在其下方迭代第二个属性以将它们显示在列表中或使用 forEach 循环。我用一个独立的字符串数组对其进行了测试,它可以工作,但是这样就不会显示操作。谢谢您的帮助。代码如下:
import SwiftUI
struct ActionsView: View {
var role = Role(roleName: "Witch", roleActions: ["Action 1","Action 2"])
var body: some View {
VStack(spacing: 20) {
Text(role.roleName)
.font(.title).fontWeight(.heavy)
VStack() {
Text("Choose Your Actions")
.font(.headline)
List(role.roleActions, id: \.self) { action in
HStack {
Text(action)
}
}
}
}
}
}
struct ActionsView_Previews: PreviewProvider {
static var previews: some View {
ActionsView()
}
}
你的意思是这样的?
import SwiftUI
struct Role : Identifiable, Hashable {
var id = UUID().uuidString
var roleName: String
var roleActions: [String]
}
struct RowView : View {
var role : Role
var body: some View {
ScrollView(.horizontal, content: {
HStack {
ForEach(role.roleActions, id: \.self) { action in
Text(action)
}
}
})
}
}
struct ContentView: View {
var roles = [Role(roleName: "Witch", roleActions: ["Action 1","Action 2"]),
Role(roleName: "Hero", roleActions: ["Action 3", "Action4"])]
var body: some View {
List (roles, id: \.self) { role in
Text(role.roleName)
.font(.title).fontWeight(.heavy)
VStack() {
Text("Choose Your Actions")
.font(.headline)
RowView(role: role)
}
}.environment(\.defaultMinListRowHeight, 140)
}
}
我有一个带有两个属性的简单对象模型,第二个属性实际上是一个字符串数组。在一个简单的视图中,我想显示第一个属性 roleName 并在其下方迭代第二个属性以将它们显示在列表中或使用 forEach 循环。我用一个独立的字符串数组对其进行了测试,它可以工作,但是这样就不会显示操作。谢谢您的帮助。代码如下:
import SwiftUI
struct ActionsView: View {
var role = Role(roleName: "Witch", roleActions: ["Action 1","Action 2"])
var body: some View {
VStack(spacing: 20) {
Text(role.roleName)
.font(.title).fontWeight(.heavy)
VStack() {
Text("Choose Your Actions")
.font(.headline)
List(role.roleActions, id: \.self) { action in
HStack {
Text(action)
}
}
}
}
}
}
struct ActionsView_Previews: PreviewProvider {
static var previews: some View {
ActionsView()
}
}
你的意思是这样的?
import SwiftUI
struct Role : Identifiable, Hashable {
var id = UUID().uuidString
var roleName: String
var roleActions: [String]
}
struct RowView : View {
var role : Role
var body: some View {
ScrollView(.horizontal, content: {
HStack {
ForEach(role.roleActions, id: \.self) { action in
Text(action)
}
}
})
}
}
struct ContentView: View {
var roles = [Role(roleName: "Witch", roleActions: ["Action 1","Action 2"]),
Role(roleName: "Hero", roleActions: ["Action 3", "Action4"])]
var body: some View {
List (roles, id: \.self) { role in
Text(role.roleName)
.font(.title).fontWeight(.heavy)
VStack() {
Text("Choose Your Actions")
.font(.headline)
RowView(role: role)
}
}.environment(\.defaultMinListRowHeight, 140)
}
}