在SwiftUI中,当数组发生更改时,列表(List)默认情况下不会自动更新。这是因为SwiftUI使用了值语义,即当数组的值发生更改时,SwiftUI无法检测到具体的更改操作。
要解决这个问题,可以使用SwiftUI中的@State属性包装器来创建一个可观察的状态变量。当数组发生更改时,通过更改状态变量的值来触发列表的更新。
下面是一个示例代码:
import SwiftUI
struct ContentView: View {
@State private var items = ["Item 1", "Item 2", "Item 3"]
var body: some View {
List(items, id: \.self) { item in
Text(item)
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.items.append("Item 4")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
在这个示例中,我们使用了@State属性包装器来创建一个可观察的状态变量items
,并将其用作列表的数据源。当items
数组发生更改时,列表会自动更新。
在onAppear
闭包中,我们使用了DispatchQueue.main.asyncAfter
方法来模拟数组的更改。在2秒后,我们向items
数组中添加了一个新的元素。
这样,当数组发生更改时,列表会自动更新,显示新添加的元素。
推荐的腾讯云相关产品:腾讯云云服务器(CVM),产品介绍链接地址:https://cloud.tencent.com/product/cvm
领取专属 10元无门槛券
手把手带您无忧上云