为什么不能在初始化过程中重新分配@State变量的 Package 值。
在下面的代码中,我正在初始化一个@State变量,但是重新分配它的 Package 值不起作用。需要创建一个全新的 Package 对象。
为什么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)
}
}
字符串
1条答案
按热度按时间8dtrkrch1#
因为保存动态视图模型数据的后台存储对象(根据它在
View
层次结构中的标识)直到这个View
结构定义的屏幕内容将要出现在屏幕上才被创建。而这正好发生在body
被调用之前。不要实现init
,坚持使用@State private var str: String = "default"
,你就不会遇到任何问题。在父
View
结构中定义@State
,并将其作为let
传递给子Views
,以进行只读访问(通过computed属性转换为子视图init)或美元语法转换为@Binding var
以进行读/写(顺便说一下,这对get/set闭包来说很方便)。body
在var被设置时被调用,如果它以前被读取过,也就是说,它就像一个onChange
,用于所有的View
的let
s/var
s。