我有一个结构用户,具有以下兴趣列表:
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")}
}
}
}
}
}
但是,当我单击按钮时,用户状态变量不会更改并且保持不变。谁能解释这是怎么回事?
答案 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")
}
}
}
}