swift SwitchUI:为什么在初始化过程中不能重新分配@State变量的 Package 值?

ztyzrc3y  于 5个月前  发布在  Swift
关注(0)|答案(1)|浏览(72)

为什么不能在初始化过程中重新分配@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)
    }
}

字符串

8dtrkrch

8dtrkrch1#

因为保存动态视图模型数据的后台存储对象(根据它在View层次结构中的标识)直到这个View结构定义的屏幕内容将要出现在屏幕上才被创建。而这正好发生在body被调用之前。不要实现init,坚持使用@State private var str: String = "default",你就不会遇到任何问题。
在父View结构中定义@State,并将其作为let传递给子Views,以进行只读访问(通过computed属性转换为子视图init)或美元语法转换为@Binding var以进行读/写(顺便说一下,这对get/set闭包来说很方便)。body在var被设置时被调用,如果它以前被读取过,也就是说,它就像一个onChange,用于所有的Viewlet s/var s。

相关问题