Изображение SwiftUI не меняется
Я пишу свой проект с SwiftUI с использованием архитектуры VIPER, и я столкнулся с проблемой, что мое изображение не обновляется после вызова .onTapGesture. Вот блоки кода, которые относятся к этой функции:
Модель:
class FavoriteBeers{
var favoriteBeers = [Beer]()
}
Взаимодействие:
func addToFavorites(beer: Beer){
favoriteBeers.favoriteBeers.append(beer)
saveFavoriteBeers()
}
func removeFromFavorites(_ beer: Beer) {
favoriteBeers.favoriteBeers.removeAll { $0 == beer }
saveFavoriteBeers()
}
func isFavorite(_ beer: Beer) -> Bool {
favoriteBeers.favoriteBeers.contains(beer)
}
Ведущий:
func favoritesButton(_ beer: Beer) -> String{
if isFavorite(beer){
return SystemImages.FilledStar.rawValue
}else{
return SystemImages.EmptyStar.rawValue
}
}
private func isFavorite(_ beer: Beer) -> Bool{
return interactor.isFavorite(beer)
}
func addOrRemoveFromFavorites(_ beer: Beer){
if isFavorite(beer){
print("now not favourite")
interactor.removeFromFavorites(beer)
}else{
print("now favourite")
interactor.addToFavorites(beer: beer)
}
}
Вид:
struct BeersListView: View{
@StateObject var presenter : BeersListPresenter
var body: some View {
NavigationView{
List{
ForEach(presenter.beers, id: \.id){ beer in
HStack{
VStack(alignment: .leading){
Text(beer.name)
.font(.headline)
Text("Vol: \(presenter.formattedABV(beer.abv))")
.font(.subheadline)
}
Spacer()
Image(systemName: presenter.favoritesButton(beer))
.frame(width: 13, height: 13)
.foregroundColor(.yellow)
.onTapGesture {
withAnimation{
presenter.addOrRemoveFromFavorites(beer)
}
}
}
}
}.onAppear{
presenter.loadList(at: 1)
} .listStyle(GroupedListStyle())
.navigationBarTitle("All beers")
}
}
}
И результат:просмотр
Но когда я нажимаю на звездочку, появляется надпись «сейчас в избранном / сейчас не в избранном», но изображение не меняется. Заранее спасибо!
2 ответа
попробуйте использовать
DispatchQueue.main.async { presenter.addOrRemoveFromFavorites(beer) }
в твоей
.onTapGesture
Решено. Только что добавил objectWillChange в метод addOrRemoveFromFavorites