【问题标题】:swift - ForEach loop with stateswift - 带状态的 ForEach 循环
【发布时间】:2020-07-29 01:00:32
【问题描述】:

如果我有这个代码:

@State var n = 3
var body: some View {
    VStack {
        Button(action:{
            if self.n == 3 {
                self.n = 5
            } else {
                self.n = 3
            }
        }) {
            Text("Click me")
        }
        ForEach(1..<self.n+1) { i in
            Text(String(i))
        }
    }
}

我希望此代码在您单击按钮时在屏幕上12312345 之间切换,但它只显示@987654330 @23。我该如何解决这个问题?

【问题讨论】:

    标签: swift foreach swiftui state


    【解决方案1】:

    你使用的ForEach的形式在item数量不变的情况下是可以的,但是如果Views可能会改变,那么你需要要么提供符合协议Identifiable的item,要么使用表单的ForEach 提供id:

    ForEach(1..<self.n+1, id: \.self) { i in
        Text(String(i))
    }
    

    作为id 传递的值是一个KeyPath,它告诉SwiftUI 将项目的哪个属性用作其标识符。对于Int,您可以只使用Int 的值,该值可以通过.self 属性访问。

    SwiftUI 使用标识符来了解 ForEach 中的项目何时被添加或删除,因此它需要它们才能让您看到更改。

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多