为什么@State变量的包装值不能在初始化期间重新赋值。
在下面的代码中,我正在初始化一个 @State 变量,但是重新分配其包装值不起作用。需要创建一个全新的包装对象。
为什么 SwiftUI 不允许在这里重新分配?
struct ContentView: View {
init() {
_str = State(initialValue: "value")
/* Reassignemnt doesn't work. */
str = "newValue"
/* Ok */
_str = State(initialValue: "newValue")
}
@State private var str: String
var body: some View {
Text(str)
}
}
因为保存动态视图模型数据的后备存储对象(根据其在
View
层次结构中的标识)不会创建,直到由该 View
结构定义的屏幕内容即将出现在屏幕上。这发生在调用 body
之前。不要实施 init
并坚持使用 @State private var str: String = "default"
,您不会遇到任何问题。
在父
@State
结构中定义 View
并将其作为 Views
传递给子 let
以进行只读访问(通过计算属性转换为子 View init)或将美元语法传递给 @Binding var
用于读/写(顺便说一下,这对于 get/set 闭包来说很方便)。