SwitfUI:为什么不能在初始化期间重新分配 @State 变量的包装值?

问题描述 投票:0回答:1

为什么@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)
    }
}

swift swiftui initialization
1个回答
0
投票

因为保存动态视图模型数据的后备存储对象(根据其在

View
层次结构中的标识)不会创建,直到由该
View
结构定义的屏幕内容即将出现在屏幕上。这发生在调用
body
之前。不要实施
init
并坚持使用
@State private var str: String = "default"
,您不会遇到任何问题。

在父

@State
结构中定义
View
并将其作为
Views
传递给子
let
以进行只读访问(通过计算属性转换为子 View init)或将美元语法传递给
@Binding var
用于读/写(顺便说一下,这对于 get/set 闭包来说很方便)。

© www.soinside.com 2019 - 2024. All rights reserved.