在哪里放置 .register() 方法来为 UserDefaults 设置 initial/default 值?
Where to place the .register() method to set an initial/default value for UserDefaults?
我目前正在努力找出正确放置 .register() 方法的位置,以便为 UserDefaults 设置 initial/default 值(在每次启动应用程序时)。
这里是我尝试在 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()
}
}
}
但是,这似乎并不能真正解决问题。有人对此有意见吗?
如果您的最低目标是 iOS 14,您可以使用 @AppStorage
将您的值保存在 UserDefaults
中并从初始值开始。您不需要特别在 @main
中添加此 @AppStorage
值来初始化它。您可以在任何 SwiftUI 视图或 Observable
class 中真正需要它的地方调用它。如果 none 已保存,它将具有此初始值。
import SwiftUI
@main
struct TestApp: App {
// This is UserDefaults starting in iOS 14.
@AppStorage("selectedRoundLength") var selectedRoundLength = 1
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
这个 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()
}
}
}
我目前正在努力找出正确放置 .register() 方法的位置,以便为 UserDefaults 设置 initial/default 值(在每次启动应用程序时)。
这里是我尝试在 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()
}
}
}
但是,这似乎并不能真正解决问题。有人对此有意见吗?
如果您的最低目标是 iOS 14,您可以使用 @AppStorage
将您的值保存在 UserDefaults
中并从初始值开始。您不需要特别在 @main
中添加此 @AppStorage
值来初始化它。您可以在任何 SwiftUI 视图或 Observable
class 中真正需要它的地方调用它。如果 none 已保存,它将具有此初始值。
import SwiftUI
@main
struct TestApp: App {
// This is UserDefaults starting in iOS 14.
@AppStorage("selectedRoundLength") var selectedRoundLength = 1
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
这个 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()
}
}
}