@State变量可以从父组件初始化或者本地初始化
时间: 2024-10-21 20:11:26 浏览: 22
在 SwiftUI 中,`@State` 变量是一种局部的状态存储,它主要用于创建那些需要随 UI 更新而动态变化的值。`@State` 可以有两种初始化方式:
1. **从父组件初始化**:
当你在子组件(如一个 `View` 或 `ViewBuilder`)中使用 `@State` 时,如果父组件已经设置了初始值,那么子组件会接收这个初始值。例如:
```swift
struct ParentView: View {
@State private var value = "From Parent"
var body: some View {
Text("Parent")
.childView(in: .content) {
ChildComponent(value: self.value)
}
}
}
struct ChildComponent: View {
@Binding var value: String // 父组件通过Binding传递值给子组件
var body: some View {
Text("Child: \(value)")
}
}
```
这里,`ParentView` 设置了 `value`,然后通过 `binding` 方式将其传递给了 `ChildComponent`。
2. **本地初始化**:
如果子组件需要自定义其初始值,可以直接在子组件内定义 `@State`,例如:
```swift
struct ChildComponent: View {
@State private var localValue = "Local initialization"
var body: some View {
Text("Child: \(localValue)")
.onChange(of: localValue) { value in
// 当 localValue 改变时执行某些操作
}
}
}
```
在这样的场景下,子组件既可以选择接受来自父组件的初始值,也可以有自己的独立初始化。
阅读全文