ForEach带有状态的循环



如果我有这个代码:

@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之间切换,但它只显示123。我该怎么解决这个问题?

如果项的数量不变,则您使用的ForEach的形式是可以的,但如果视图可能发生更改,则您需要提供符合协议Identifiable的项,或者使用提供id::的ForEach的形式

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

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

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

相关内容

  • 没有找到相关文章

最新更新