swift - 带状态的 ForEach 循环
Posted
技术标签:
【中文标题】swift - 带状态的 ForEach 循环【英文标题】:swift - ForEach loop with state 【发布时间】: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))
我希望此代码在您单击按钮时在屏幕上1
2
3
和1
2
3
4
5
之间切换,但它只显示@987654330 @2
3
。我该如何解决这个问题?
【问题讨论】:
【参考方案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
中的项目何时被添加或删除,因此它需要它们才能让您看到更改。
【讨论】:
以上是关于swift - 带状态的 ForEach 循环的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 对我的项目中的 Foreach 循环中的“金钱”值求和? [关闭]