SwiftUI状态变量未更新

时间:2020-02-07 07:28:15

标签: ios swift swiftui swiftui-list swiftui-state

我有一个结构用户,具有以下兴趣列表:

struct User: Hashable, Codable, Identifiable, Equatable {
    var id: String
    var name: String
    var hobbies: [String]
}

然后我使用用户列表作为状态变量来生成列表视图。单击列表视图中的按钮后,新的爱好将添加到用户的爱好中。

struct UsersListView: View {

    @State var users: [User]


    var body: some View {

                TitleView(titleText: "Friends")
                    .padding(.leading, 30.0)

                List(userDisplayList) { user in
                     Text(user.name)
                     Text(user.hobbies.joined(separator: ", "))
                     Button(action: {self.users[0].hobbies.append("new hobby")}
                }
            }
        }
    }
}

但是,当我单击按钮时,用户状态变量不会更改并且保持不变。谁能解释这是怎么回事?

2 个答案:

答案 0 :(得分:0)

您在userDisplayList中显示每个用户,而不是在users中显示。

因此,当您在users中更改某些值时,SwiftUI认为视图中没有要更新的内容,因为没有任何内容依赖于users变量。

如果您的List(users) { user in中没有其他逻辑,请尝试使用userDisplayList

答案 1 :(得分:0)

尝试一下:

    struct User: Hashable, Codable, Identifiable, Equatable {
    var id = UUID()
    var name: String
    var hobbies: [String]
}

struct UsersListView: View {

    @State var users: [User] = [User(name: "aaaa", hobbies: [])]


    var body: some View {

        List(users) { user in
                     Text(user.name)
                     Text(user.hobbies.joined(separator: ", "))
                        Button(action: {
                            self.users[0].hobbies.append("new hobby")
                        }) {
                            Text("Create hobby")
                        }

                }
            }
        }