Tenho o seguinte código 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")
}
}
Meu problema é que TestView
e TestModel
estão sendo reinicializados na autorrotação do dispositivo, apesar TestModel
de ser uma @State
variável. Isso não é o que eu quero e eu entendo que o problema é que declarei variáveis de ambiente de classe de tamanho que estão causando TestView
a redefinição para um novo valor. Uma maneira de resolver o problema é mover testModel
para superview e inicializá-lo, mas não tenho certeza se essa é sempre uma abordagem escalável se você tiver hierarquias de visualização mais profundas. Qual é a abordagem certa para resolver esse problema, especialmente se alguém pode ter horizontalSizeClass
ou verticalSizeClass
estar profundamente na hierarquia de visualização?
Algumas
Environment
propriedades fazem oView
re-instanciate. Os desenvolvedores não têm controle sobre isso, então a solução é usar opcional.https://developer.apple.com/documentation/swiftui/state