SwiftUI .onAppear, ne s'exécute qu'une seule fois
Aug 15 2020
Dans une SwiftUI
application, j'ai un code comme celui-ci:
var body: some View {
VStack {
Spacer()
........
}
.onAppear {
.... I want to have some code here ....
.... to run when the view appears ....
}
}
Mon problème est que je voudrais exécuter du code dans le bloc .onAppear , afin qu'il soit exécuté lorsque l'application apparaît à l'écran, après son lancement ou après avoir été en arrière-plan pendant un certain temps. Mais il semble que ce code ne soit exécuté qu'une seule fois au lancement de l'application, et jamais après. Est-ce que je manque quelque chose? Ou devrais-je utiliser une stratégie différente pour obtenir le résultat souhaité?
Réponses
5 Frankenstein Aug 15 2020 at 15:46
Vous devrez observer l'événement lorsque l'application entre au premier plan et le publier en utilisant @Published
le ContentView
. Voici comment:
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()
}
}