SwiftUI 图像没有改变

SwiftUI Image is not changing

我正在使用 VIPER 架构使用 SwiftUI 编写我的项目,我遇到了调用 .onTapGesture 后我的图像没有更新的问题。以下是与此功能相关的代码块:

型号:

class FavoriteBeers{
    var favoriteBeers = [Beer]()
}

互动者:

func addToFavorites(beer: Beer){
        favoriteBeers.favoriteBeers.append(beer)
        saveFavoriteBeers()
    }
func removeFromFavorites(_ beer: Beer) {
        favoriteBeers.favoriteBeers.removeAll { [=11=] == 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")
        }
    }
}

结果是

但是当我点击星形按钮时,它会打印“现在 favourite/now 不是最喜欢的”,但图像不会改变。提前致谢!

尝试在 .onTapGesture

中使用 DispatchQueue.main.async { presenter.addOrRemoveFromFavorites(beer) }

已解决。刚刚在 addOrRemoveFromFavorites 方法中添加了 objectWillChange