Exécuter le code lors du lancement de l'application dans SwiftUI 2.0
Aug 22 2020
Dans ma structure App, j'ai une petite fonction qui vérifie si l'utilisateur a déjà ouvert l'application. Sinon, il affiche une vue d'intégration avec quelques questions. À l'heure actuelle, j'ai juste un .onAppear attaché à la fois à Onboarding et ContentView pour exécuter la fonction, mais lorsque vous lancez l'application, la vue Onboarding clignote pendant une seconde rapide. Comment puis-je exécuter la fonction lors du lancement, afin que la vue d'intégration ne clignote pas pendant une seconde ?
Voici ma structure App :
import SwiftUI
@main
struct TestApp: App {
@State private var hasOnboarded = false
var body: some Scene {
WindowGroup {
if hasOnboarded {
ContentView(hasOnboarded: $hasOnboarded) .onAppear(perform: checkOnboarding) } else { Onboarding(hasOnboarded: $hasOnboarded)
.onAppear(perform: checkOnboarding)
}
}
}
func checkOnboarding() {
let defaults = UserDefaults.standard
let onboarded = defaults.bool(forKey: "hasOnboarded")
hasOnboarded = onboarded
}
}
Réponses
6 Asperi Aug 21 2020 at 22:44
Vous pouvez le faire dans init, c'est un point d'entrée très précoce, vous pouvez donc simplement initialiser la propriété :
@main
struct TestApp: App {
private var hasOnboarded: Bool
init() {
let defaults = UserDefaults.standard
hasOnboarded = defaults.bool(forKey: "hasOnboarded")
}
// ... other code
}