ForEach 中的绑定变量未更新

Posted

技术标签:

【中文标题】ForEach 中的绑定变量未更新【英文标题】:Binding variable in ForEach not update 【发布时间】:2020-07-14 22:42:18 【问题描述】:

我想在单击另一张电影卡时更改评级明星的图像。其他文字信息会发生变化,但星级不会发生变化。我正在使用 RatingView 创建评级星堆栈。我首先展示的是未评级的,然后是评级的明星。但是当我更换电影卡时,星星的颜色并没有改变


import SwiftUI

struct RatingView: View 
    
    @Binding var movie : Movie
    
    var body: some View 
        HStack
            ForEach(0 ..< Int(movie.getLikers()))  item in
            
                Image("star")
                    .scaleEffect(1.5)
                    .padding(10)

            
            ForEach(0 ..< Int(movie.getDislikers()))  item in

                Image("star.fill")
                    .scaleEffect(1.5)
                    .padding(10)

            
            Text(movie.imageName)
        
        
    


【问题讨论】:

您能否发布您的Move struct/class,这将有助于我们进一步调查。 不要使用函数,比如getLikers() - 使用属性。 代码似乎是正确的。您还可以添加使用RatingView 的地方的代码吗?我怀疑问题可能隐藏在那里。 【参考方案1】:

将您的 ForEach 构造函数更改为使用 ForEach([Hashable])

如果movie.getDislikers() 返回[Hashable] 并且Movie 是某种观察到的对象,它将更新。这是我在示例应用中的解决方案。

struct SomeStruct: Hashable 




struct Sample: View 
@Binding var store: [SomeStruct]
var body: some View 
List 
   Section 
      ForEach(store, id: \.self)  (foo: SomeStruct) in
        HStack 
             Text(foo)
        



【讨论】:

以上是关于ForEach 中的绑定变量未更新的主要内容,如果未能解决你的问题,请参考以下文章

在绑定调用中使用 SwiftUI ForEach 的迭代器变量

Haskell 是不是支持未绑定的变量?

为啥Vue会更新父级中的变量-未使用事件

当用于模式匹配作为映射中的键时,变量是未绑定的

在 ngOnInit() 中使用数据绑定从本地 JSON 文件读取数据会导致未定义的变量

淘汰赛样式绑定未更新