У меня следующая иерархия представлений
Nurse List View > Nurse Card > Favorite button
Просмотр списка медсестер
struct NurseListView: View {
@State var data: [Nurse] = []
var body: some View {
List {
ForEach(data.indices, id: \.self) { index in
NurseCard(data: self.$data[index])
}
}
}
}
Карта медсестры
struct NurseCard: View {
@Binding var data: Nurse
var body: some View {
FavoriteActionView(data:
Binding(
get: { self.data },
set: { self.data = $0 as! Nurse }
)
)
}
}
Просмотр избранных действий
struct FavoriteActionView: View {
@Binding var data: FavoritableData
var body: some View {
Button(action: {
self.toggleFavIcon()
}) {
VStack {
Image(data.isFavorite ? "fav-icon" : "not-fav-icon")
Text(String(data.likes.count))
}
}
}
private func toggleFavIcon() {
if data.isFavorite {
if let index = data.likes.firstIndex(of: AppState.currentUser.uid) {
data.likes.remove(at: index)
}
} else {
data.likes.append(AppState.currentUser.uid)
}
}
}
Когда выполняется toggleFavIcon
, он добавляет / удаляет идентификатор пользователя из свойства likes
в объекте данных, но я не вижу изменения, если я go не вернусь на предыдущую страницу и снова открою страницу. Что мне здесь не хватает?