Переменная состояния SwiftUI не обновляется
У меня есть структура User со следующим списком хобби:
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 ответа
Вы отображаете каждого пользователя в userDisplayList
, не в users
.
Итак, когда вы меняете какое-то значение в users
, SwiftU Я думаю, что обновлять по вашему мнению нечего, так как от users
переменная.
Попробуйте использовать List(users) { user in
вместо этого, если в вашем userDisplayList
.
Попробуй это:
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")
}
}
}
}