Я пытаюсь создать функцию избранного, используя список с двумя циклами ForEach. Когда я нажимаю кнопку, элемент перемещается в правильный раздел, но изображение кнопки и ее функциональные возможности не обновляются. Есть ли что-то, чего мне не хватает или что я делаю неправильно?
Если я перейду к другому представлению и обратно, список сначала отображается правильно, но по-прежнему демонстрирует такое же поведение, если я нажимаю кнопку.
Если я использую два отдельных списка с одинаковыми настройками, все работает нормально, но в пользовательском интерфейсе это выглядит странно, потому что каждый список занимает одинаковое количество места, даже если в списке нет элементов.
В качестве альтернативы, есть ли способ принудительно перерисовать список как часть нажатия кнопки?
Спасибо!
import SwiftUI
struct BusinessListView: View {
@EnvironmentObject var state: ApplicationState
var body: some View {
VStack{
List {
Section(header: Text("Favorites")) {
if(state.favorites.count == 0){
Text("No Favorites")
}
else {
ForEach(state.favorites, id: \.self) { favorite in
HStack{
Button(
action: {},
label: { Image(systemName: "heart.fill").foregroundColor(.red) }
)
.onTapGesture { self.toggleFavorite(business: favorite)}
Text("\(favorite.name)")
}
}
}
}
Section(header: Text("Other Businesses")) {
ForEach(state.others, id: \.self) { business in
HStack{
Button(
action: {},
label: { Image(systemName: "heart") }
)
.onTapGesture { self.toggleFavorite(business: business)}
Text("\(business.name)")
}
}
}
}
}
}
func toggleFavorite(business: Business){
if(state.favorites.contains(business)){
self.state.favorites = self.state.favorites.filter {$0 != business}
self.state.others.append(business)
}
else{
self.state.others = self.state.others.filter {$0 != business}
self.state.favorites.append(business)
}
sortBusinesses()
}
func sortBusinesses(){
self.state.favorites.sort {
$0.name < $1.name
}
self.state.others.sort {
$0.name < $1.name
}
}
}