SwiftUI 是苹果推出的一个声明式 UI 框架,用于构建 macOS、iOS、watchOS 和 tvOS 应用程序。ForEach
是 SwiftUI 中的一个视图构造器,用于遍历集合(如数组)并渲染每个元素。
ForEach
不会更新内容的原因通常是因为 SwiftUI 的依赖跟踪机制。SwiftUI 只会在其依赖发生变化时重新渲染视图。如果集合本身没有发生变化(例如,数组的引用没有变,只是数组内部元素变了),ForEach
就不会重新渲染。
@State
或 @ObservedObject
:确保集合的变化能够被 SwiftUI 检测到。假设我们有一个简单的表单,其中包含一个文本字段和一个按钮,点击按钮会向数组中添加一个新的字符串。
import SwiftUI
struct ContentView: View {
@State private var items = ["Item 1", "Item 2"]
var body: some View {
VStack {
ForEach(items.indices, id: \.self) { index in
Text(items[index])
}
Button(action: {
items.append("New Item")
}) {
Text("Add Item")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
在这个示例中,items
是一个 @State
属性包装的可变数组。每次点击按钮时,items
数组都会被修改,这会导致 ForEach
重新渲染。
通过这种方式,你可以确保 ForEach
能够正确地响应集合的变化并更新 UI。
领取专属 10元无门槛券
手把手带您无忧上云