如果我有此代码:
@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))
}
}
}
我希望这段代码在1
2
3
和1
2
3
4
{{1} }在您点击按钮时在屏幕上显示,但是仅显示5
1
2
。我该如何解决?
答案 0 :(得分:0)
如果项目数恒定,则您使用的ForEach
形式是可以的,但是如果视图可能更改,则您需要提供符合协议Identifiable
的项目,或使用提供ForEach
的{{1}}形式:
id:
作为ForEach(1..<self.n+1, id: \.self) { i in
Text(String(i))
}
传递的值是id
,它告诉SwiftUI该项目的哪个属性用作其标识符。对于KeyPath
,您可以仅使用Int
的值,该值可以通过Int
属性进行访问。
SwiftUI使用标识符来知道何时添加或删除.self
中的项目,因此需要它们才能使您看到更改。