在哪里放置 .register() 方法来设置 UserDefaults 的初始/默认值?

Mal*_*ito 6 ios userdefaults swiftui

我目前正在努力找出正确放置 .register() 方法的位置,以设置 UserDefaults 的初始/默认值(在应用程序的每次启动时)。

这是我尝试在 Xcode 随项目生成的“App”文件中初始化它的地方:

import SwiftUI

@main
struct TestApp: App {

    init() {
        //Sets default values for the user defaults that have not yet been set and should not return 0/false
        UserDefaults.standard.register(defaults: [
                "selectedRoundLength": 1
            ]
        )
    }

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这似乎并没有真正起作用。有人对此有意见吗?

Asp*_*eri 7

这init是在UIApplication设置之前调用的,因此如果您想注册默认值(可以从大字典的 plist 中完成),应该通过应用程序委托适配器来完成。

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {

        // Register defaults here !!
        UserDefaults.standard.register(defaults: [
                "selectedRoundLength": 1
                // ... other settings
            ]
        )

        return true
    }
}

@main
struct TestApp: App {

    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)