UserDefaults 和 AppStorage 混用时,默认值不统一的问题。因为AppStorage持久化时机不确定,UserDefaults先调用时可能获取的值仍是系统默认值。
解决方案有两种:
1. UserDefaults.standard.object(forKey:) == nil
判断。
1 2 3
| if UserDefaults.standard.object(forKey: "hasHapticFeedback") == nil { UserDefaults.standard.set(true, forKey: "hasHapticFeedback") }
|
1 2 3 4 5
| extension DefaultsKeys { var userColorScheme: DefaultsKey<String> { .init("userColorScheme", defaultValue: "default") } var userThemeName: DefaultsKey<String?> { .init("userThemeName") } var userLastLoginDate: DefaultsKey<Date?> { .init("userLastLoginDate") } }
|