Изображение 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

Другие вопросы по тегам