我有以下 SwiftUI 代码:
struct TestContentView: View {
@Environment(\.verticalSizeClass) var verticalSizeClass
@Environment(\.horizontalSizeClass) var horizontalSizeClass
var body: some View {
TestView()
.ignoresSafeArea()
}
}
struct TestView: View {
@State var model:TestModel = TestModel()
var body: some View {
Text("Count \(model.counter)")
}
}
@Observable
class TestModel {
var counter:Int = 0
deinit {
print("Calling deinit on TestModel")
}
}
我的问题是,TestView
尽管和是变量TestModel
,但它们在设备自动旋转时会被重新初始化。这不是我想要的,我明白问题是我声明了大小类环境变量,这导致它们被重置为新值。解决问题的一种方法是将移动到超级视图并初始化它,但我不确定如果您有更深的视图层次结构,这是否总是一种可扩展的方法。解决这个问题的正确方法是什么,特别是如果可以有或深入视图层次结构?TestModel
@State
TestView
testModel
horizontalSizeClass
verticalSizeClass
某些
Environment
属性会导致View
重新实例化。开发人员对此没有任何控制权,因此解决方案是使用可选的。https://developer.apple.com/documentation/swiftui/state