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
}