Esegui il codice durante l'avvio dell'app in SwiftUI 2.0

Aug 22 2020

Nella struttura della mia app, ho una piccola funzione che controlla se l'utente ha già aperto l'app. In caso contrario, mostra una vista di onboarding con alcune domande. In questo momento, ho solo un .onAppear collegato sia a Onboarding che a ContentView per eseguire la funzione, ma quando avvii l'app, la vista Onboarding lampeggia per un secondo veloce. Come posso eseguire la funzione durante l'avvio, in modo che la vista Onboarding non lampeggi per un secondo?

Ecco la struttura della mia 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
    }
}

Risposte

6 Asperi Aug 21 2020 at 22:44

Puoi farlo in init, è un punto di ingresso molto presto, quindi puoi semplicemente inizializzare la proprietà:

@main
struct TestApp: App {
    private var hasOnboarded: Bool
    
    init() {
        let defaults = UserDefaults.standard
        hasOnboarded = defaults.bool(forKey: "hasOnboarded")
    }

    // ... other code
}