在 SwiftUI 中,为什么 @State 变量在 init() 中会被默默忽略?

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

根据 xcode 控制台中的输出顺序,似乎表明默认赋值发生在

init()
执行之前。但
init()
中的赋值并不生效。这是代码:

TestStateVar(a_stateVar: 5)

...

struct TestStateVar: View {
    @State private var stateVar = -1
    
    init(a_stateVar: Int) {
        print("init-1: self.stateVar = \(self.stateVar)|a_stateVar = \(a_stateVar)")
        self.stateVar = a_stateVar
        print("init-2: self.stateVar = \(self.stateVar)")
    }
    
    var body: some View {
        Text("Test")
            .onAppear() {
                print("onAppear: self.stateVar = \(self.stateVar)")
            }
    }
}

这是 xcode 控制台的输出:

init-1: self.stateVar = -1|a_stateVar = 5
init-2: self.stateVar = -1

onAppear: self.stateVar = -1

是否可以(即使用某种 linting)配置 xcode 来检测此错误?

variables swiftui state initialization-order
1个回答
0
投票

尝试使用正确的方式来初始化

@State var
,例如:

init(a_stateVar: Int) {
     print("init-1: self.stateVar = \(self.stateVar) | a_stateVar = \(a_stateVar)")
     _stateVar = State(initialValue: a_stateVar) // <--- here
     print("init-2: self.stateVar = \(self.stateVar)")
 }
© www.soinside.com 2019 - 2024. All rights reserved.