为什么我不能在SwiftUI初始化中为@State var赋值?

时间:2020-06-15 17:30:57

标签: swift swiftui

为什么在初始化中将此分配给@State var无效?

class getOldValuesFromDb : ObservableObject {
    @State var oldValue: Int = 0

    init(){
        let val = 999
        self.oldValue = val
        print("OldValue: \(self.oldValue) and Val: \(val)")
    }
}

val的值显示正确,但是当我将其分配给oldValue时,它的值仍为零。我的print()看起来像这样: OldValue: 0 and Val: 999 怎么可能?

1 个答案:

答案 0 :(得分:2)

我不确定@State之外应该使用View

来自Apple documentation

SwiftUI管理您声明为状态的任何属性的存储。状态值更改时,视图会使外观无效并重新计算主体。将状态用作给定视图的唯一事实来源。

您应仅从视图主体内部或通过其调用的方法访问状态属性。因此,请将状态属性声明为私有,以防止视图的客户端访问它。从任何线程更改状态属性都是安全的。

您尝试使用@Published代替吗?