我知道这是完全错误的,但我正在尝试理解 SwiftUI 框架。 直接在视图主体中设置状态时,为什么我没有收到警告、崩溃或效果?是否有一个合乎逻辑的解释为什么 SwiftUI 只是默默地忽略此状态更新?
struct IgnoredStateUpdate: View {
@State var value = 1
var body: some View {
print("value before \(value)") // prints 1
value = 2 // Warning, error or crash expected
print("value after \(value)") // prints 1
return Text("Hello World!")
}
}
这是不允许的,因为这里
@State
的目的是在 body
发生变化时重新渲染它。它可能会导致无限循环。我相信这就是为什么如果您尝试运行上述代码,编译器会打印出运行时警告:
在视图更新期间修改状态,这将导致未定义的行为。