根据 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 来检测此错误?
尝试使用正确的方式来初始化
@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)")
}