【问题标题】:SwiftUI Image is not changingSwiftUI 图像没有改变
【发布时间】:2022-01-20 18:07:11
【问题描述】:

我正在使用 VIPER 架构使用 SwiftUI 编写我的项目,我遇到了调用 .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")
        }
    }
}

结果是

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

【问题讨论】:

    标签: swiftui swiftui-ontapgesture


    【解决方案1】:

    尝试在您的.onTapGesture 中使用DispatchQueue.main.async { presenter.addOrRemoveFromFavorites(beer) }

    【讨论】:

    • 很遗憾没有成功
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多