Oi Weverton, tudo bem?
No SwiftUI temos o que chamamos de property wrappers, que nos permitem declarar exatamente como nossos dados são observados, renderizados e modificados pelas views da aplicação.
Nesse caso, utilizamos muito do StateObject
e Published
. Vamos supor que você tem uma classe representando os dados e as regras de negócio da sua aplicação, e toda vez que algo dessa classe mudar, você precisa refletir as alterações na sua view, certo?
Para isso, na sua view, você utiliza a propriedade StateObject
para monitorar essas alterações da classe, enquanto na classe em questão você utiliza o Published
para determinar qual variável deve ser "publicada" para que a view possa fazer alterações sobre ela.
Veja o exemplo de código abaixo:
class UserProgress: ObservableObject {
@Published var score = 0
}
struct ContentView: View {
@StateObject var progress: UserProgress
var body: some View {
VStack {
Text("Sua pontuação é de \(progress.score)")
Button("Aumentar pontuação") {
progress.score += 1
}
}
}
}
Observação: usamos o StateObject
apenas na view inicial (content view), caso precise usar em outras subviews, é necessário usar o ObservedObject
.
Podemos usar o EnvironmentObject
para questões referentes ao ambiente.
Espero ter ajudado, abraços!