在 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)
    }
}