SwiftUI .onAppear, executando apenas uma vez
Em um SwiftUI
aplicativo, tenho um código como este:
var body: some View {
VStack {
Spacer()
........
}
.onAppear {
.... I want to have some code here ....
.... to run when the view appears ....
}
}
Meu problema é que gostaria de executar algum código dentro do bloco .onAppear , para que seja executado quando o aplicativo aparecer na tela, após a inicialização ou após ficar um tempo em segundo plano. Mas parece que esse código só é executado uma vez na inicialização do aplicativo e nunca depois. Estou esquecendo de algo? Ou devo usar uma estratégia diferente para obter o resultado que desejo?
Respostas
5 Frankenstein
Você teria que observar o evento quando o aplicativo entra em primeiro plano e publicá-lo usando @Published
o ContentView
. Veja como:
struct ContentView: View {
@ObservedObject var observer = Observer()
var body: some View {
VStack {
Spacer()
//...
}
.onReceive(self.observer.$enteredForeground) { _ in
print("App entered foreground!") // do stuff here
}
}
}
class Observer: ObservableObject {
@Published var enteredForeground = true
init() {
if #available(iOS 13.0, *) {
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIScene.willEnterForegroundNotification, object: nil)
} else {
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
}
@objc func willEnterForeground() {
enteredForeground.toggle()
}
}
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas