在 SwiftUI 2.0 中启动应用程序期间运行代码

jas*_*hng 2 swift swiftui

在我的 App 结构中,我有一个小函数来检查用户之前是否打开过该应用程序。如果没有,它会显示一个包含几个问题的入职视图。现在,我只有一个 .onAppear 附加到 Onboarding 和 ContentView 来运行该函数,但是当您启动应用程序时,Onboarding 视图会快速闪烁一秒钟。如何在启动期间运行该功能,以便 Onboarding 视图不会闪烁一秒钟?

这是我的应用程序结构:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 8

您可以在init,这是非常早的入口点,因此您可以初始化属性:

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

    // ... other code
}
Run Code Online (Sandbox Code Playgroud)

  • 我们是否知道这是否保证只被调用一次,就像“main”方法一样?或者“App”结构是否像“View”结构一样——重复创建? (3认同)