@State修饰的属性不允许在本地进行初始化。
时间: 2023-11-28 20:50:53 浏览: 98
是的,@State属性必须在声明时只声明类型而不进行初始化,因为SwiftUI需要控制它们的生命周期。@State属性在视图被初始化之前都不存在,因此我们不能在声明时初始化它们。相反,我们可以在初始化方法中对它们进行初始化,或者使用赋值语句在方法中为它们赋值。例如:
```
struct ContentView: View {
@State var count: Int
init() {
self._count = State(initialValue: 0)
}
var body: some View {
Text("Count: \(count)")
}
}
```
在上面的代码中,我们在初始化方法中使用`State(initialValue:)`语法来为`count`属性进行初始化,因为`@State`属性不能在声明时进行初始化。然后我们在`body`中使用`count`属性来显示计数器的值。
相关问题
@State装饰的变量支持初始化子组件的常规变量
`@State` 是 SwiftUI 中的一个修饰符,用于声明组件内部的数据状态,它使得这些数据可以在视图层次结构中进行观察,并允许它们在组件渲染时自动更新。当你在 SwiftUI 的某个 `View` 上使用 `@State` 关键字,你可以定义一个变量并初始化它,这个初始化值会在子组件初次加载时传递下来。
例如:
```swift
struct ParentView: View {
@State private var value = "Hello, Child!"
var body: some View {
VStack {
Text("Parent Component")
.onReceive(valueSubject) { newValue in
value = newValue
}
ChildComponent(value: $value)
}
}
}
struct ChildComponent: View {
@ObservedObject var parentValue: ParentView
init(value: Binding<String>) {
_parentValue = State(wrappedValue: value)
}
var body: some View {
Text(parentValue.value)
}
}
```
在这个例子中,`ChildComponent` 接收了一个从 `ParentView` 子组件传来的绑定 `value`。当 `ParentView` 的 `value` 发生改变时,`ChildComponent` 会立即反映出新的值。
阅读全文