SwiftUI2.0でアプリの起動中にコードを実行する

Aug 22 2020

私のアプリ構造体には、ユーザーが以前にアプリを開いたことがあるかどうかを確認する小さな関数があります。そうでない場合は、いくつかの質問を含むオンボーディングビューが表示されます。現在、関数を実行するためにOnboardingとContentViewの両方に.onAppearをアタッチしていますが、アプリを起動すると、Onboardingビューが一瞬点滅します。起動中に関数を実行して、オンボーディングビューが1秒間点滅しないようにするにはどうすればよいですか?

これが私のアプリの構造体です:

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
    }
}

回答

6 Asperi Aug 21 2020 at 22:44

でそれを行うことができますinit。これは非常に初期のエントリポイントであるため、プロパティを初期化するだけです。

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

    // ... other code
}