SwiftUI 数据状态和绑定
方案 | 说明 | 备注 |
---|---|---|
@State & @Binding |
提供 View 内部的状态存储 | 应该是被标记为 private 的简单值类型,仅在内部使用。 |
ObservableObject & @ObservedObject |
针对跨越 View 层级的状态共享 | 处理更复杂的数据类型,在数据变化时触发界面刷新。 |
@EnvironmentObject |
对于 “跳跃式” 跨越多个 View 层级的状态 | 更方便地使用 ObservableObject,以简化代码。 |
@State
& @Binding
Parent view:
struct ParentView: View {
@State private var foo: Bool = false
var body: some View {
VStack(spacing: 25) {
Text("foo in Parent: \(self.foo ? "✔️" : "❌")")
ChildView(foo: $foo)
}
}
}
Child view:
struct ChildView: View {
@Binding var foo: Bool
var body: some View {
Button("toggle foo from Child"